首页 > 代码库 > codeforces_730_A
codeforces_730_A
这题题目的大意:
从一行数中,随意取出2-Min(5,n)个数,让它们都-1 (如果是0,就不能-1)
最后,求它们需要处理几次,才能它们全部都相等。
大致题解:
根据它的样例输出,我们可以知道:
每次取出2个或者3个一起-1就可以了,
为什么呢?
证明:
取出4个都-1 就等于 取出2次 2个都-1
取出5个都-1 就等于 取出1次 2个都-1 + 取出1次 3个都-1
那么接下来就很好做了,一道练手的题目。
附上代码,刚刚开始写python 有点丑
n = (int(input()))R = list(map(int,input().split()))Time = 0;check = FalseOutput = []while (check == False): pos_max = []; pos_sec = []; Max_sec = -1; Max_num = 0; Max = -1; Min = 999999999; Time += 1; string = ‘‘ for i in range(len(R)-1,-1,-1): if (R[i] < Min): Min = R[i] if (R[i] > Max): Max_sec = Max; Max = R[i]; pos_sec = pos_max; pos_max = []; pos_max.append(i); Max_num = 1 elif (R[i] == Max): Max_num += 1; pos_max.append(i) elif (R[i] > Max_sec): Max_sec = R[i] pos_sec = [] pos_sec.append(i)# print(Max,‘ ‘,Max_sec,‘ ‘,pos_max,‘ ‘,pos_sec,‘ ‘,R) if (Max == Min): check = True break if (Max_num > 1): if (Max_num % 2 == 1): j = 0; some = [] for k in range(n-1,-1,-1): if (pos_max[j] == k): if (R[k] != 0): R[k] -= 1; some.append(k) j += 1; if (j > 2): j = 0; j = len(some)-1 for k in range(n): if (some[j] == k): string += ‘1‘ j -= 1 if (j < 0): j = 0; else : string += ‘0‘; else : j = 0; some = []; for k in range(n-1,-1,-1): if (pos_max[j] == k): if (R[k] != 0): R[k] -= 1; some.append(k); # print(‘1‘, end=‘‘) j += 1; if (j > 1): j = 1; j = len(some)-1 for k in range(n): if (some[j] == k): string += ‘1‘ j -= 1 if (j < 0): j = 0; else : string += ‘0‘; else : for k in range(n): ## print(‘k is ‘,k) if (pos_max[0] == k): if (R[k] != 0): R[k] -= 1; string += ‘1‘ #print(‘1‘, end=‘‘) continue if (pos_sec[0] == k): if (R[k] != 0): R[k] -= 1; string += ‘1‘ #print(‘1‘, end=‘‘) continue string += ‘0‘ #print(‘0‘, end=‘‘); # print(‘\n‘) Output.append(string)print(Max)print(Time-1)for i in range(len(Output)): print(Output[i])
最重要的不是这个。
学到了一个语句:
i = max(range(n), key = lambda x: d[x])
这句话的意思就是 取出 d这个List中最大的那个数的位置,神奇的东西。
answer.append(‘‘.join(‘1‘ if k == i or k == j or k ==z else ‘0‘ for k in range(n)))
join 的用法:
SS = {‘hello‘: 1, ‘good‘: 2, ‘boy‘: 3, ‘CqDef_Xxx‘: 4}print(‘:‘.join(SS))
就是在dict中每个东西之间加上冒号:hello:good:boy:CqDef_Xxx
回到上面那句话:原来Python可以写的这么优雅,Get到一个JN
codeforces_730_A
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。