1.
题目:公司进行了一次黑客马拉松大赛,全公司一共分为了N个组,每组一个房间排成一排开始比赛,比赛结束后没有公布成绩,但是每个组能够看到自己相邻的两个组里比自己成绩低的组的成绩,比赛结束之后要发奖金,以1w为单位,每个组都至少会发1w的奖金,另外,如果一个组发现自己的奖金没有高于比自己成绩低的组发的奖金,就会不满意,作为比赛的组织方,根据成绩计算出至少需要发多少奖金才能让所有的组满意。
输入描述:
每组数据先输入N,然后N行输入N个正整数,每个数表示每个组的比赛成绩。
输出描述:
输出至少需要多少w的奖金
示例1
输入 10
20
32
12
32
45
11
21
31
41
33
输出
20
2.代码
# !/usr/bin/python # -*- coding: UTF-8 -*- num = 10 list = [20, 32, 12, 32, 45, 11, 21, 31, 41, 33] test=[] tax = [1 for i in range(10)] # 构造变化函数 change = [-1] for i in range(0,num-1): if list[i] < list[i+1]: change.append(1) else: change.append(-1) print('change: ', change) # 正式开始 for n in range(1, num + 1): print('\n..............第%d次................'% (n)) add = 0 # 最低点不需要修改数字 if change[n-1] == -1: print('右边界如果是减小直接为最低奖金, 增量:', add) # 右边界如果是减小直接为最低奖金 elif change[n-1] == -1 and change[n] == 1: print('最低点只有1w奖金, 增量:', add) else: if n >= num: break_flag_right = True print('右边不存在连续的下降') # 左边处理 # change下降直接没有算下去的必要 else: if change[n-1] == 1: add = 1 for i in range(num): print() if change[n - i - 2] == 1: add += 1 print('add:', add, 'change[%d] = %d' % (n - i - 2, change[n - i - 2]), end='') elif change[n - i - 2] == -1: print('add:', add, 'change[%d] = %d' % (n - i - 2, change[n - i - 2])) break print('左边连续的1: ', add) # 右边减小的处理 # while break_flag_right == False: # 同样 左边增量和你没什么关系 else: add = 0 for i in range(num): # 循环次数 够用就行 if n+i >= num: print('到末尾') break elif change[n + i] == -1: add += 1 print('add:', add, 'change[%d] = %d' % (n + i, change[n + i]), end='') else: print('add:', add, 'change[%d] = %d' % (n + i, change[n + i])) break print('右边一共几个-1: ', add) test.append(add) print('test: ', test) print('基本工资%d+每组奖金%d=%d'% (10, sum(test), sum(test)+10))3. 结果
change: [-1, 1, -1, 1, 1, -1, 1, 1, 1, -1]
..............第1次................
右边界如果是减小直接为最低奖金, 增量: 0
..............第2次................
add: 1 change[0] = -1
左边连续的1: 1
右边一共几个-1: 1
..............第3次................
右边界如果是减小直接为最低奖金, 增量: 0
..............第4次................
add: 1 change[2] = -1
左边连续的1: 1
右边一共几个-1: 1
..............第5次................
add: 2 change[3] = 1
add: 2 change[2] = -1
左边连续的1: 2
右边一共几个-1: 2
..............第6次................
右边界如果是减小直接为最低奖金, 增量: 0
..............第7次................
add: 1 change[5] = -1
左边连续的1: 1
右边一共几个-1: 1
..............第8次................
add: 2 change[6] = 1
add: 2 change[5] = -1
左边连续的1: 2
右边一共几个-1: 2
..............第9次................
add: 2 change[7] = 1
add: 3 change[6] = 1
add: 3 change[5] = -1
左边连续的1: 3
右边一共几个-1: 3
..............第10次................
右边界如果是减小直接为最低奖金, 增量: 0
test: [0, 1, 0, 1, 2, 0, 1, 2, 3, 0]
基本工资10+每组奖金10=20