题目

三国游戏

这题我一开始只想到了暴力,在赛后根据提示得到正解排序+贪心

一开始使用的是组合+二分查找最大事件,但是肯定会超时。

对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 stdin

n = 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进行取余即可。

1

翻转

异或和之差

小蓝的旅行计划

奇怪的数