第七届东南大学短码竞赛初赛 总结

几句废话

第一次尝试完全用 Python 答题
(然后发现了自己的垃圾

A


显然答案以 9 为循环节

exec(int(input())*"print((input()-1)%9+1);")

B


暴力即可

exec(int(input())*"s=input();print('NO' if sum([((i&1&(ord(s[i])%2))|(~i&1&~(ord(s[i])%2)))for i in range(len(s))]) else 'YES');")

C

参见 CF1118C

def f():
 n=int(input());D=list(map(int,input().split()));a=[[0]*20 for i in range(20)];C=[0]*1007;F=[];R=range((n+1)//2)
 for i in D:C[i]+=1
 for i in R:
  for j in R:
   if(i!=n-i-1)&(j!=n-j-1):F.append((4,(i,j)))
   elif(i!=n-i-1)^(j!=n-j-1):F.append((2,(i,j)))
   else:F.append((1,(i,j)))
 for E in [4,2,1]:
  L=1
  for G in F:
   if G[0]!=E:continue
   while(L<1005)&(C[L]<E):L+=1
   if L==1005:print("NO");return
   i=G[1][0];j=G[1][1];a[i][j]=a[n-i-1][j]=a[i][n-j-1]=a[n-i-1][n-j-1]=L;C[L]-=E
 print("YES")
 for i in range(n):print(*a[i][:n])
exec(int(input())*"f();")

D


利用 bisect 模块即可
注意输出要一起输出,如果边操作变输出就会 T 掉(原因未知)

from bisect import bisect,insort
I=input;T=int(I())
for _ in range(T):
 a=[-1];b=[];q=int(I())
 for i in range(q):
  x,y=map(int,I().split())
  if x<2:insort(a,y)
  else:
   z=bisect(a,y)-1;b+=[a[z]]
   if a[z]>0:del a[z]
 for i in b:print(i)

E

显然我们可以给出一个 \(O(m)\) 的拉格朗日插值,做 \(k\) 次,总复杂度 \(O(mk)\)

当然也可以写多项式多点求值

翻译成 python 后的插值至今未调出来

后记

第一次参加短码竞赛,策略不当
以及不知道 from xx import * 这种操作导致的懵逼

猜你喜欢

转载自www.cnblogs.com/mollnn/p/12686478.html