试题A: 和平干饭日
本题总分:5 分
【问题描述】
铲屎官小蓝家里养了26 只体型巨大的缅因猫。为了给它们增加生活乐趣,小蓝海淘了一台带有人工智能的 “奇葩喂食器”。
这台喂食器的出粮规则极其反人类:它每天吐出的猫粮颗粒总数,是将从1 开始的自然数依次拼接而成的整数。
具体来说:
l第1 天,喂食器吐出 1 颗猫粮;
l第2 天,喂食器吐出 12 颗猫粮(将 1 和 2 拼在一起);
l第3 天,喂食器吐出 123 颗猫粮;
l……
如果某天吐出的猫粮总数,能够被这26 只猫完全平分(即每只猫分到的颗粒数一模一样),它们就会相安无事,这一天被称为 “和平干饭日”。如果不能被完全平分,它们就会为了抢夺残粮而大打出手。
现在,喂食器的运行计划已经设定了整整2026 天。请你忧心忡忡的小蓝算一算,在这 2026 天里,总共有多少天是 “和平干饭日”?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 A:和平干饭日(结果填空)
答案:76
res = 0now = 0for i in range(1, 2027): cnt = len(str(i)) now = (now * (10 ** cnt) + i) % 26 if now == 0: res += 1print(res)
试题 B:干涉条纹(结果填空)
答案:225964689(模 998244353)
MOD = 998244353A = 20269876543210B = 20260123456789max_s = A + Bimport mathR = int(math.isqrt(max_s))ans = 0for k in range(0, R + 1): s = k * k low = max(0, s - B) high = min(A, s) if low > high: continue ans += high - low + 1 ans %= MODprint(ans % MOD)
import mathimport sysdef solve(): input = sys.stdin.read data = input().split() T = int(data[0]) for i in range(1, T + 1): n = int(data[i]) if n <= 4: print(4) continue res = float('inf') r = int(math.isqrt(n)) for a in range(2, r + 2): b = (n + a - 1) // a if b >= 2: res = min(res, a * b) print(res)solve()
import sysfrom collections import dequedef main(): input = sys.stdin.read().split() idx = 0 t = int(input[idx]) idx += 1 for _ in range(t): n = int(input[idx]) m = int(input[idx + 1]) idx += 2 adj = [[] for _ in range(m)] for i in range(n): x = i % m y = (2 * i) % m adj[x].append(i) adj[y].append(i) vis = [False] * m q = deque() q.append(0) vis[0] = True cnt = 0 while q: u = q.popleft() cnt += 1 for v in adj[u]: if not vis[v]: vis[v] = True q.append(v) if cnt == m: print(m - 1) else: print(-1)if __name__ == "__main__": main()
import sysdef main(): input = sys.stdin.read data = input().split() ptr = 0 T = int(data[ptr]) ptr += 1 for _ in range(T): N = int(data[ptr]) ptr += 1 w = list(map(int, data[ptr:ptr + N])) ptr += N s = 0 for x in w: s ^= (x // 2) print("L" if s != 0 else "Q")if __name__ == "__main__": main()


import syssys.setrecursionlimit(1 << 25)def main(): input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]) Q = int(data[idx + 1]) idx += 2 parent = list(range(N + 1)) add = [0] * (N + 1) val = [0] * (N + 1) def find(u): if parent[u] != u: parent[u] = find(parent[u]) return parent[u] out = [] for __ in range(Q): tp = int(data[idx]) if tp == 1: X = int(data[idx + 1]) Y = int(data[idx + 2]) idx += 3 rx = find(X) ry = find(Y) if rx != ry: parent[ry] = rx elif tp == 2: X = int(data[idx + 1]) A = int(data[idx + 2]) idx += 3 val[X] += A elif tp == 3: X = int(data[idx + 1]) A = int(data[idx + 2]) idx += 3 rx = find(X) add[rx] += A elif tp == 4: X = int(data[idx + 1]) idx += 2 rx = find(X) out.append(str(val[X] + add[rx])) print('\n'.join(out))if __name__ == "__main__": main()


MOD = 10**9 + 7def main(): import sys n, k = map(int, sys.stdin.readline().split()) max_k = k dp = [[0] * (max_k + 2) for _ in range(n + 2)] dp[0][0] = 1 for i in range(n): for j in range(max_k + 1): if dp[i][j] == 0: continue dp[i + 1][j] = (dp[i + 1][j] + dp[i][j]) % MOD nj = j + (i + 1) if nj > max_k: nj = max_k dp[i + 1][nj] = (dp[i + 1][nj] + dp[i][j]) % MOD total = pow(2, n, MOD) ans = (total - dp[n][0] + MOD) % MOD print(ans)if __name__ == "__main__": main()


MOD = 998244353def main(): import sys input = sys.stdin.read data = input().split() n = int(data[0]) a = list(map(int, data[1:n + 1])) a = [0] + a L = [0] * (n + 2) R = [0] * (n + 2) st = [] for i in range(1, n + 1): while st and a[st[-1]] <= a[i]: st.pop() L[i] = st[-1] if st else 0 st.append(i) st = [] for i in range(n, 0, -1): while st and a[st[-1]] < a[i]: st.pop() R[i] = st[-1] if st else (n + 1) st.append(i) def get_len(x): if x == 0: return 1 return len(str(x)) res = 0 for i in range(1, n + 1): lc = i - L[i] rc = R[i] - i tot = lc * rc le = get_len(tot) res = (res + a[i] % MOD * le) % MOD print(res % MOD)if __name__ == "__main__": main()
如果你正在学习python,这些Python资料、数据分析、Python从入门到实践第三版pdf书籍、Python+Pycharm安装包&永久激活插件、直播课程,可以在这里免费领取哈👇