题目 三国游戏 这题我一开始只想到了暴力,在赛后根据提示得到正解排序+贪心
一开始使用的是组合+二分查找最大事件,但是肯定会超时。
对x,y,z三个国家进行排序,排序规则是这个国家减去另外两个国家的兵力的降序。最后对三个国家取一个max即可
有一个需要注意的点,在遍历的时候enumerate的start要设置为1,因为事件是从1开始。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 from sys import stdinn = eval (input ()) x = list (map (int , stdin.readline().split())) y = list (map (int , stdin.readline().split())) z = list (map (int , stdin.readline().split())) sort_x = sorted (range (n), key=lambda i: -(x[i] - y[i] - z[i])) sort_y = sorted (range (n), key=lambda i: -(y[i] - x[i] - z[i])) sort_z = sorted (range (n), key=lambda i: -(z[i] - x[i] - y[i])) vx = vy = vz = 0 res_x = res_y = res_z = -1 for cnt, i in enumerate (sort_x, start=1 ): vx += x[i] vy += y[i] vz += z[i] if vx - vy - vz > 0 : res_x = cnt vx = vy = vz = 0 for cnt, i in enumerate (sort_y, start=1 ): vx += x[i] vy += y[i] vz += z[i] if vy - vx - vz > 0 : res_y = cnt vx = vy = vz = 0 for cnt, i in enumerate (sort_z, start=1 ): vx += x[i] vy += y[i] vz += z[i] if vz - vx - vy > 0 : res_z = cnt print (max (res_x, res_y, res_z))
平均 填充 棋盘 这题我使用的是差分数组,这样可以实现区间加减,最后对2进行取余即可。
翻转 异或和之差 小蓝的旅行计划 奇怪的数