题目链接: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天练过一次博弈论,导致考场看见题没太蒙,但同时导致了审题不认真丢分。学长押题压得准,学长教得好,我没学好我罪该万死。(可惜,这个题分拿全应该就省一了) 本质上就是看操作数 操作数统计方式如下: alt 如果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")

本次复盘到此结束。剩下的已经超出我的能力范围了,有机会的话会补全