CF Hello 2026
愿新的一年如花绚烂。
没怎么打,把简单题写了
Binary Array Game
如果有一整段把所有0都包进去,Alice可以把它变成1.如果数列随后变成了11那么Alice就赢了。如果不行,那么数列不能变成全为1的形式,Bob就可以把整个数列变为1.因此只需判断头尾是否同为0即可。
t=int(input())
for _ in range(t):
n=int(input())
a=list(map(int,input().split()))
if(a[0]==0 and a[n-1]==0):
print("Bob")
else:
print("Alice")
Yet Another MEX Problem
一段区间中把小数换成大数一定会让MEX更高。而最终k-1个数的mex最大是k-1,因此可以先把比k-1大的都删了,再把重复的都删了。最终效果就是看整个区间小于k的所有数的mex。
t=int(input())
for _ in range(t):
n,k=map(int,input().split())
a=list(map(int,input().split()))
t=set(a)
ans=k-1
for i in range(k-1):
if(i not in t):
ans=i
break
print(ans)
War Strategy
赛时O(n)做法。向两边扩展,最优策略是先屯兵,然后一次性打到较长的那一边,再直接打到较短的那一边(走完较长边的时间中已经屯好了走完较短边所需士兵)。因此直接枚举较长边长度即可。 优化考虑二分。O(logn)
from math import ceil
t=int(input())
for _ in range(t):
n,m,k=map(int,input().split())
ans=1
t1=k-1
t2=n-k
a=min(t1,t2)
b=max(t1,t2)
for i in range(b,-1,-1):
if(m-(2*i-1)<0):
continue
t=min(m-(2*i-1),a)
if(t>i):
break
ans=max(ans,1+i+t)
print(ans)
DISCUSSION
Comments
Sign in with GitHub to join the conversation.