题目链接:https://www.luogu.com.cn/contest/321016#problems
和平干饭日
思路
就是看有多少天吐出的猫粮数 mod 26可以等于0。这里使用了字符串拼接的方式来计算每天吐出的猫粮数
代码
import sys
sys.set_int_max_str_digits(100000)
#跑代码的时候出现了整数转字符串长度限制,这个是3.11出现的,考场上用的版本并没有这个限制,前两行可以不写
total=1
cnt=0
for i in range(2,2027):
total=str(total)
total=total+str(i)
total=int(total)
if total%26==0:
cnt+=1
print(cnt)
答案:76
干涉条纹
思路
在考场上写出了时间复杂度n^2的代码,跑到考试结束也没出结果(笑) 这题应该是枚举平方数S,然后对每个 S 去找有多少个 (a,b) 满足 a+b=S 找两个较小的数字推一下,不难看出:
当0 ≤ S ≤ B:个数 = S+1
当B < S ≤ A:个数 = B+1
当A < S ≤ A+B:个数 = A+B−S+1
代码
import math
M1 = 20269876543210
M2 = 20260123456789
total_max = M1 + M2
k_min = 0
k_max = int(math.isqrt(total_max))
ans = 0
for k in range(k_min, k_max + 1):
S = k * k
if S <= M2:
cnt = S + 1
elif S <= M1:
cnt = M2 + 1
else:
cnt = M1 + M2 - S + 1
ans=(ans+cnt)%998244353
print(ans)
答案:315082704
定制展示盘
思路
本质上是一个判断质数,如果是质数就+1变成合数,不是质数直接输出n 注意,n<3的时候不能+1,要输出4(疑似考场上因为这个丢分了(说疑似是因为不知道有没有这个测试点,但考场上确实没写))
代码
import sys
import math
input=lambda:sys.stdin.readline().strip()
def isPrime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(math.sqrt(n)) + 1, 2):
if n % i == 0:
return False
return True
T=int(input())
for _ in range(T):
n=int(input())
if n<=3:
print("4")
elif isPrime(n):
print(n+1)
else:
print(n)
奇偶博弈
思路
考前n天练过一次博弈论,导致考场看见题没太蒙,但同时导致了审题不认真丢分。学长押题压得准,学长教得好,我没学好我罪该万死。(可惜,这个题分拿全应该就省一了)
本质上就是看操作数
操作数统计方式如下:
如果W[i]是奇数(非1),变成0需要两步,偶数(非0)则是1步;如果是1操作数算1,0就是0。
按这个方式统计操作数,是奇数就是先手赢,偶数后手赢
代码
import sys
input = lambda: sys.stdin.readline().strip()
T = int(input())
for _ in range(T):
N = int(input())
W = list(map(int, input().split()))
cnt=0
for i in range(N):
if W[i]%2==0:
if W[i]==0:
cnt+=0
else:
cnt+=1
else:
if W[i]==1:
cnt+=1
else:
cnt+=2
if cnt%2==0:
print("Q")
else:
print("L")
本次复盘到此结束。剩下的已经超出我的能力范围了,有机会的话会补全

京公网安备 11010502036488号