OD 算法题 B卷【排队游戏】
文章目录
- 排队游戏
排队游戏
- 新来的老师给班里的同学排一个队,每个学生有一个能力值,一些学生是刺头不会听老师的话,而是自己选位置;
- 非刺头同学在剩下的位置按照能力值从小到大排;对非刺头同学,如果发现他前面有能力值比自己高的同学,他不满程度就增加,增加的数量等于前面能力值比他大的同学的个数;
- 刺头不会产生不满;
- 如果整个班级累计的不满程度超过k,那么老师就没办法教这个班级了
输入描述:
第一行输入n, m, k ,分别表示班级总人数,刺头数,最大不满程度;
第二行为刺头所在位置(从0开始)
第三行有n个数,表示老师排好的队中每个同学的能力值,非刺头同学一定按照能力值升序排序;
输出描述:
0或者1, 0表示老师可以继续教这个班级;1表示不可以继续教;
示例1
输入:
4 2 3
0 1
1810 1809 1801 1802
输出:
1
示例2
输入:
4 2 4
0 1
1810 1809 1801 1802
输出:
0
python实现:
- 暴力求解,计算每个非刺头同学的不满程度,并累加,最后与k值比较;
- 每个非刺头同学前面,只有是刺头且能力值比自己高时,不满程度才+1;
# 输入
n, m, k = [int(i) for i in input().strip().split()]
# 刺头的位置索引
bad_stu_idx = [int(i) for i in input().strip().split()]# 每个同学的能力值
ability = [int(i) for i in input().strip().split()]sum_val = 0 # 不满程度
# 计算每个非刺头的不满程度
for i in range(n):if i in bad_stu_idx:continuej = 0while j < i:if j in bad_stu_idx and ability[j] > ability[i]:sum_val += 1j += 1if sum_val > k:print(1)
else:print(0)