目录
A:穿越时空之门 100🏆
随着 2024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。
在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。
在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。
穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。
国王选定了小蓝作为领路人,带领着力量值从 1 到 2024 的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这 2024 位勇者中,有多少人符合穿越时空之门的条件。
def er(x):
s=0
while x:
s+=x%2
x//=2
return s
def si(x):
s=0
while x:
s+=x%4
x//=4
return s
cnt=0
for i in range(1,2025):
if er(i)==si(i):
cnt+=1
print(cnt)
# 答案:63
B:数字串个数 0🏆
小蓝想要构造出一个长度为 10000 的数字字符串,有以下要求:
1) 小蓝不喜欢数字 0 ,所以数字字符串中不可以出现 0 ;
2) 小蓝喜欢数字 3 和 7 ,所以数字字符串中必须要有 3 和 7 这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其 对 取余后的结果。
补题:容斥原理
mod = int(1e9 + 7)
n = 10000
cnt = pow(9, n, mod)
# 去除 no(3) + no(7) 的情况
cnt -= 2 * pow(8, n, mod)
# 补上 no(3 and 7) 的情况
cnt += pow(7, n, mod)
print(cnt % mod)
C:连连看 45🏆
时间限制: 3s 内存限制: 512MB 提交: 408 解决: 45
题目描述
小蓝正在和朋友们玩一种新的连连看游戏。在一个 n × m 的矩形网格中,每个格子中都有一个整数,第 i 行第 j 列上的整数为 Ai, j 。玩家需要在这个网格中寻找一对格子 (a, b) − (c, d) 使得这两个格子中的整数 Aa,b 和 Ac,d 相等,且它们的位置满足 |a − c| = |b − d| > 0 。请问在这个 n × m 的矩形网格中有多少对这样的格子满足条件。
输入格式
输入的第一行包含两个正整数 n, m ,用一个空格分隔。
接下来 n 行,第 i 行包含 m 个正整数 Ai,1, Ai,2, · · · , Ai,m ,相邻整数之间使用一个空格分隔。
输出格式
输出一行包含一个整数表示答案。
样例输入
3 2 1 2 2 3 3 2
样例输出
6
提示
【样例说明】
一共有以下 6 对格子:(1, 2) − (2, 1) ,(2, 2) − (3, 1) ,(2, 1) − (3, 2) ,(2, 1) −(1, 2) ,(3, 1) − (2, 2) ,(3, 2) − (2, 1) 。
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ n, m ≤ 50 ;对于所有评测用例,1 ≤ n, m ≤ 1000 ,1 ≤ Ai, j ≤ 1000 。
暴力:
n,m=map(int,input().split())
dic=dict()
for i in range(1,n+1):
a=list(map(int,input().split()))
for j in range(m):
if a[j] not in dic:
dic[a[j]]=[(i,j+1)]
else:
dic[a[j]].append((i,j+1))
cnt=0
for i in dic:
for j in range(len(dic[i])):
for k in range(len(dic[i])):
if j!=k and abs(dic[i][j][0]-dic[i][k][0])==abs(dic[i][j][1]-dic[i][k][1]):
cnt+=1
print(cnt)
D:神奇闹钟 9🏆
时间限制: 3s 内存限制: 512MB 提交: 283 解决: 111
题目描述
小蓝发现了一个神奇的闹钟,从纪元时间(1970 年 1 月 1 日 00:00:00 )开始,每经过 x 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。
对于给出的任意一个格