A 等火车
题意
每s时刻有一辆车经过,问第t时刻距离下一班车还有多久。
思路
输出(s-t%s)%s即可。
代码
x = input().split()
s = int(x[0])
q = int(x[1])
for i in range(q):
a = int(input())
print('%d\n' %((s - a % s) % s))
B 数字游戏
题意
有2n-1个数,为2,3,4…2n。
首先裁判随机擦掉一个数。然后从乙开始擦掉一个数,然后到甲。。。直到剩两个数,如果它们互质那么甲胜,否则乙胜,甲乙都会采用最优策略,求出裁判擦数的方案使得乙能获胜。
思路
可以发现如果裁判先擦掉的数是奇数,乙必胜,否则乙必败。
当第一次擦掉是奇数的时候,黑板上一个有n个偶数,甲最多擦掉n−2个偶数,所以乙必胜。
当第一次擦掉是偶数的时候,设为ii
那么把2n-2个整数分为(2,3),(4,5)…(i-2,i-1),(i+1,i+2)…(n-1,n-2)
当乙擦掉一组中的某一个数的时候,甲把另一个擦掉。
最后只会剩下同一组的两个整数,它们互质,甲必胜。
所以答案输出n-1
代码
n = int(input())
print(n - 1)
C 最大生成树
题意
给出n个点,编号为1~n的完全图,其中i,j之间的边权为|i-j|,求最大生成树的边权之和。
思路
找规律,能发现答案为:n-1+n-2+n-2+n-3+n-3+…n/2+n/2,利用公式求和即可。
也有O(eis)算法,公式为
n
2
−
(
n
2
/
4
)
n^2-(n^2/4)
n2−(n2/4)
代码
n = int(input()) - 1
print((n * n - int(n * n / 4)) % 998244353)