找回密码
 会员注册
查看: 32|回复: 0

蓝桥杯第15届省赛PythonB组32.60分

[复制链接]

9

主题

0

回帖

28

积分

新手上路

积分
28
发表于 2024-9-13 09:37:33 | 显示全部楼层 |阅读模式
F题列表越界访问了……省一但没什么好名次测评链接:https://www.dotcpp.com/oj/train/1120/C语言网真是**测评,时间限制和考试的不一样,E题给我整时间超限?A:穿越时空之门 100🏆【问题描述】        随着2024年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。        在二进制的领域里,勇者的力量被转换成了力量数值的二进制表示中各数位之和。        在四进制的领域里,力量的转换规则相似,变成了力量数值的四进制表示中各数位之和。        穿越这扇时空之门的条件是严苛的:当且仅当勇者在二进制领域的力量等同于四进制领域的力量时,他才能够成功地穿越。        国王选定了小蓝作为领路人,带领着力量值从1到2024的勇者们踏上了这段探索未知的旅程。作为小蓝的助手,你的任务是帮助小蓝计算出,在这2024位勇者中,有多少人符合穿越时空之门的条件。【解析及代码】省流:数字转成二进制、四进制,数位之和相等的数答案:63cnt=0foriinrange(1,2025):#二进制bins=bin(i)[2:].count("1")#四进制four=0whilei:four+=i%4i//=4#累加cnt+=bins==fourprint(cnt)'运行运行B:数字串个数 100🏆【问题描述】        小蓝想要构造出一个长度为10000的数字字符串,有以下要求:        1)小蓝不喜欢数字0,所以数字字符串中不可以出现0;        2)小蓝喜欢数字3和7,所以数字字符串中必须要有3和7这两个数字。        请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对取余后的结果。【解析及代码】容斥原理秒杀答案:157509472mod=int(1e9+7)n=10000cnt=pow(9,n,mod)#去除no(3)+no(7)的情况cnt-=2*pow(8,n,mod)#补上no(3and7)的情况cnt+=pow(7,n,mod)print(cnt%mod)'运行运行C:连连看 45🏆【问题描述】        小蓝正在和朋友们玩一种新的连连看游戏。在一个n×m的矩形网格中,每个格子中都有一个整数,第i行第j列上的整数为。玩家需要在这个网格中寻找一对格子使得这两个格子中的整数和相等,且它们的位置满足。请问在这个n×m的矩形网格中有多少对这样的格子满足条件。【输入格式】        输入的第一行包含两个正整数n,m,用一个空格分隔。        接下来n行,第i行包含m个正整数,相邻整数之间使用一个空格分隔。【输出格式】        输出一行包含一个整数表示答案。【样例】输入输出说明321223326一共有以下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%100%【解析及代码】根据题意可知,(a,b)-(c,d)中的两个元素位于同一斜线上(1,2)-(2,1)和(2,1)-(1,2)算不同的两对,优化一下比较流程计算结果即可n,m=map(int,input().split())A=[list(map(int,input().split()))for_inrange(n)]#A[a][b]=A[c][d],处于同一斜线上cnt=0foriinrange(n):forjinrange(m):#只跟当前行以下的行比较#向左下角forpinrange(1,min(n-i,j+1)):cnt+=A[i][j]==A[i+p][j-p]#向右下角forpinrange(1,min(n-i,m-j)):cnt+=A[i][j]==A[i+p][j+p]print(cnt*2)D:神奇闹钟 100🏆【问题描述】        小蓝发现了一个神奇的闹钟,从纪元时间(1970年1月1日00:00:00)开始,每经过x分钟,这个闹钟便会触发一次闹铃(纪元时间也会响铃)。这引起了小蓝的兴趣,他想要好好研究下这个闹钟。        对于给出的任意一个格式为yyyy-MM-ddHH:mm:ss的时间,小蓝想要知道在这个时间点之前(包含这个时间点)的最近的一次闹铃时间是哪个时间?        注意,你不必考虑时区问题。【输入格式】        输入的第一行包含一个整数T,表示每次输入包含T组数据。        接下来依次描述T组数据。        每组数据一行,包含一个时间(格式为yyyy-MM-ddHH:mm:ss)和一个整数x,其中x表示闹铃时间间隔(单位为分钟)。【输出格式】        输出T行,每行包含一个时间(格式为yyyy-MM-ddHH:mm:ss),依次表示每组数据的答案。【样例】输入输出22016-09-0718:24:33102037-01-0501:40:43302016-09-0718:20:002037-01-0501:30:00【评测用例规模与约定】100%【解析及代码】 WhatcanIsay?importtimefmt="%Y-%m-%d%H:%M:%S"for_inrange(int(input())):datetime,x=input().rsplit(maxsplit=1)x=int(x)*60t=round(time.mktime(time.strptime(datetime,fmt)))print(time.strftime(fmt,time.localtime(t-t%x)))E:蓝桥村的真相 45🏆【问题描述】     在风景如画的蓝桥村,n名村民围坐在一张古老的圆桌旁,参与一场思想的较量。这些村民,每一位都有着鲜明的身份:要么是誉满乡野的诚实者,要么是无可救药的说谎者。        当会议的钟声敲响,一场关于真理与谬误的辩论随之展开。每位村民轮流发言,编号为i的村民提出了这样的断言:坐在他之后的两位村民——也就是编号i+1和i+2(注意,编号是环形的,所以如果i是最后一个,则i+1是第一个,以此类推)之中,一个说的是真话,而另一个说的是假话。        在所有摇曳不定的陈述中,有多少真言隐藏在谎言的面纱之后?        请你探索每一种可能的真假排列组合,并计算在所有可能的真假组合中,说谎者的总数。【输入格式】     输入的第一行包含一个整数T,表示每次输入包含T组数据。        接下来依次描述T组数据。        每个数据一行包含一个整数n,表示村落的人数。【输出格式】     输出T行,每行包含一个整数,依次表示每组数据的答案。【样例】输入输出说明23366可能的组合有「假,假,假」「真,真,假」「真,假,真」「假,真,真」说谎者的总数为3+1+1+1=6。【评测用例规模与约定】10%40%100%【解析及代码】1表谎言,0表真言,每3个人可能的组合有:010,001,100,111前三种情况:100是一个循环(第三人是前两人的“同或”),如果n能被3整除,这三种情况就贡献了n个说谎的第四种情况:全都是111,贡献了n个说谎的for_inrange(int(input())):n=int(input())print(n*(1+(n%3==0)))F:魔法巡游 9🏆【问题描述】     在蓝桥王国中,两位魔法使者,小蓝与小桥,肩负着维护时空秩序的使命。他们每人分别持有N个符文石,这些石头被赋予了强大的力量,每一块上都刻有一个介于1到之间的数字符号。小蓝的符文石集合标记为,小桥的则为。        两位魔法使者的任务是通过使用符文石,在各个时空结点间巡游。每次巡游遵循这样一条法则:当小蓝使用了符文石到达新的结点后,小桥必须选用一个序号更大的符文石(即某个满足j>i)前往下一个结点。同理,小桥抵达之后,小蓝需要选择一个序号k>j的符文石继续他们的巡游。        为了成功地穿梭时空,两个连续使用的符文石上的数字符号必须有共鸣,这种共鸣只有当数字符号中至少包含一个特定的元素——星火(数字0)、水波(数字2)或者风语(数字4)时,才会发生。例如,符号序列126,552,24,4中的每对连续符文都包含了至少一个共鸣元素,则它们是一系列成功的巡游;而如果是15,51,5,则不成立,因为它们之间的共鸣元素不包含星火、水波或风语中的任意一个。        小蓝总是先启程,使用他的符文石开启巡游。        你的任务是计算这对魔法使者能够执行的最长时空巡游序列的长度。这样的序列形式为,其中序列索引满足,并且序列中每一对相邻的符文石都至少包含一个共鸣元素。【输入格式】     输入的第一行包含一个整数N,表示每位魔法使者持有的符文石数量。        第二行包含N个整数,相邻整数之间使用一个空格分隔,表示小蓝的符文石上刻有的数字符号。        第三行包含N个整数,相邻整数之间使用一个空格分隔,表示小桥的符文石上刻有的数字符号。【输出格式】     输出一行包含一个整数,表示小蓝和小桥在遵守所有规则的情况下,最多能进行多少次时空巡游。【样例】输入输出说明5126393581424420499024046524小蓝和小桥可以选择以下符文石序列进行巡游:(126)→(240)→(42)→(52)这里,数字2作为共鸣元素连接了和、和t,数字2、4作为共鸣元素连接了和。【评测用例规模与约定】30%100%【解析及代码】编写类Element,重写__init__方法以搜集符文石的特定元素,存储到set中存储非空的Element的索引,结合bisect的二分查找加速枚举,直接动态规划测评结果“答案错误”,不知道哪里错了importbisectclassElement(set):base={"0","2","4"}def__init__(self,s):super().__init__(set(s)&self.base)n=int(input())e_lan=list(map(Element,input().split()))e_qiao=list(map(Element,input().split()))#编制非空元素的索引i_lan=[iforiinrange(n)ife_lan[i]]i_qiao=[iforiinrange(n)ife_qiao[i]]ifnot(i_lanandi_qiao):print(1)#两者都非空else:#小蓝先出发dp=[[0,0]for_inrange(n)]foriini_lan:dp[i][0]=1res=0foriinsorted(set(i_lan+i_qiao)):j_lan=bisect.bisect_left(i_lan,i)j_qiao=bisect.bisect_left(i_qiao,i)#小蓝出发ifj_lan1的族群returnsum(v*(v+1)//2forvinfilter((1).__lt__,Counter(self).values()))dset=DisjointSet()for_inrange(m):u,v,w=map(int,input().split())#只存储符合条件的边ifl
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-26 13:13 , Processed in 0.391498 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表