牛客练习赛55

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)

你可能感兴趣的:(练习赛,牛客练习赛)