一道编程题Python

一道编程题Python

马上比赛了!

描述

周末程老板催黄同学和刘同学出门运动。但因为他俩太卷了,于是他们决定在纸上模拟爬山。
纸上有个从左到右的排列p。首先黄同学选择一个数x并把这个数告诉刘同学。之后,刘同学选择一个不同的数y。(1≤x≤n,1≤y≤n,x≠y)
接着两人的游戏按照如下方式轮流进行,黄同学先手:
如果是黄同学的轮次,黄同学需要把当前自己的数x改成x’,满足
1≤x′≤n,∣x′−x∣=1,x′≠y,px′<px
2.如果是刘同学的轮次,刘同学需要把当前自己的数y改成y’,满足
1≤y′≤n,∣y′−y∣=1,y′≠ x,py′<py
如果谁不能动,谁就输了,另一个人赢。你作为黄同学的粉丝,想知道有多少个初始的x,使得两人在最优策略下黄同学能赢。
输入格式
输入有两行,第一行一个整数n,(2≤n≤10000),代表排列的长度。
第二行n个整数,代表排列p。
输出格式
输出一个整数,代表有多少个初始的x,使得黄同学能赢
输入样例
5
1 2 5 4 3
输出样例
1
数据规模
对于20%数据,2≤n≤500
对于50%数据,2≤n≤2000
对于100%数据,2≤n≤100000

帮我看一下代码哪里错了,请给出正解

谢谢!

n = int(input('请输入一个整数:'))

num = input('请输入%d个整数,以空格隔开:' % int(n)).split(' ')

p = list(map(int,num))

res = []

def climb():

for i in range(len(p)-1):

if p[i] > p[i+1]:

if p[i] != max(p):

res.append(p[i])

return len(res)

print(climb())


回答:

先吐槽两句,这哪是爬山明明是下山;直接输入数字序列不就行了,为什么还要单独输入一个个数。

很明显几个规律(我假定p中数字是唯一的):
1,数字序列可以完全分类成若干个顶分型(3,5,4这种)和底分型(3,2,4这种),它们中间是一个上升笔或者下降笔。
2,黄同学一开始必须站在顶上,如果他站在任一个坡上,刘同学只要堵在下坡路上就行了。
3,每个顶两边坡长度各不相同。
如果只有一个顶,a)两边坡长相同,黄同学必胜。b)坡长不相同,黄同学必输。
如果有多个顶,黄同学必须选坡最长的那个顶,不然刘同学选了他必赢。如果最长坡长的顶有多个,黄同学必输。如果只有一个就回到上一步处理。

所以解题过程如下:
1,把p里所有的顶底找出来
2,找出坡长最长的那个顶,如果有多个就无解
3,判断最高顶两边坡长,如果相同,这个顶点就是黄同学必胜的初始点。如果不同就无解。

总体来说,x的个数只能是0或1。黄同学想赢的条件比较苛刻,基本是个先手保输的游戏。

以上是 一道编程题Python 的全部内容, 来源链接: utcz.com/p/938029.html

回到顶部