2024蓝桥杯省赛pythonB组

文章讲述了在一个神秘的时空之门探险中,勇者力量需同时在二进制和四进制表示中数位之和相等才能穿越。计算2024位勇者中符合条件的数量,同时涉及数字字符串构建和矩阵游戏中的计数问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 A:穿越时空之门  100🏆

B:数字串个数  0🏆

C:连连看 45🏆

题目描述

输入格式

输出格式

样例输入

样例输出

提示

D:神奇闹钟 9🏆

题目描述

输入格式

输出格式

样例输入

样例输出

提示

E:蓝桥村的真相 18🏆

题目描述

输入格式

输出格式

样例输入

样例输出

提示

F:魔法巡游 100🏆

题目描述

输入格式

输出格式

样例输入

样例输出

提示

G:缴纳过路费 27🏆

题目描述

输入格式

输出格式

样例输入

样例输出

提示

H:纯职业小组

总节:


 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 分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。

对于给出的任意一个格

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值