-
C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学C组 第一场(2020.7.5) 题目+题解
2020-07-06 16:43:41C/C++描述 第十一届蓝桥杯省赛 第一场(2020.7.5) 题目+题解C/C++描述 第十一届蓝桥杯省赛 第一场(2020.7.5) 题目+题解
大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客
本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!
博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客
题目来源网络与群友提供,博主未参加这次比赛
文章目录
试题 A: 指数计算
本题总分:5 分
【问题描述】
7 月 1 日是建党日,从 1921 年到 2020 年,中国共产党已经带领中国人民
走过了 99 年。
请计算:7 ^ 2020 mod 1921,其中 A mod B 表示 A 除以 B 的余数。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 A 题解
第一题不搞那些花里胡哨的技巧,看到这种花里胡哨的题目,直接打开机器上的Python环境,直接算
print((7**2020)%1921)
答案为:
480
试题 B: 解密
本题总分:5 分
【问题描述】
小明设计了一种文章加密的方法:对于每个字母 c,将它变成某个另外的
字符 Tc。下表给出了字符变换的规则:
字母c Tc 字母c Tc 字母c Tc 字母c Tc a y n l A Y N L b x o g B X O G c m p o C M P O d d q u D D Q U e a r f E A R F f c s s F C S S g i t z G I T Z h k u p H K U P i n v w I N V W j t w b J T W B k j x r K J X R l h y e L H Y E m q z v M Q Z V 例如,将字符串 YeRi 加密可得字符串 EaFn。
小明有一个随机的字符串,加密后为
EaFnjISplhFviDhwFbEjRjfIBBkRyY
(由 30 个大小写英文字母组成,不包含换行符),请问原字符串是多少?
(如果你把以上字符串和表格复制到文本文件中,请务必检查复制的内容
是否与文档中的一致。在试题目录下有一个文件 str.txt,第一行为上面的字符
串,后面 52 行依次为表格中的内容。)
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
只包含 30 个大小写英文字母的字符串,在提交答案时只填写这个字符串,填写
多余的内容将无法得分。
试题 B 题解
这里如果有src.txt这个文件的话,可以直接写个Python程序,读入后输入EaFnjISplhFviDhwFbEjRjfIBBkRyY,找出原字符即可。
这里我没那个文件,就直接复制表格了,粘贴的时候发现还是一行一行的来的,不过没关系,这个字符串直接处理了就好了,Python程序为:
s = 'aynlAYNLbxogBXOGcmpoCMPOddquDDQUearfEARFfcssFCSSgitzGITZhkupHKUPinvwINVWjtwbJTWBkjxrKJXRlhyeLHYEmqzvMQZV' dir = {} for i in range(len(s)): if(i%2 == 1): dir[s[i]] = s[i-1] a = 'EaFnjISplhFviDhwFbEjRjfIBBkRyY' for item in a: print(dir[item],end='',sep='')
答案为:
YeRikGSunlRzgDlvRwYkXkrGWWhXaA
试题 C: 跑步训练
本题总分:10 分
【问题描述】
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗
600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是
均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循
环。如果某个时刻小明的体力到达 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 C 题解
这里可以口算:答案为:
3880
10000 / (600-300) == 33.33 33*(600-300) = 9900 10000 - 9900 + 300 = 400 < 600 所以时间为32*2*60 + 400/10 = 3880
也可以写程序模拟:
energy = 10000 min = 0 second = 0 while(energy): min += 1 if min % 2 == 1: if energy > 600 : energy -= 600 else: min -= 1 second = energy/10 energy = 0 else: energy += 300 if energy <= 0: break print(min*60+second)
答案:
3880
试题 D: 合并检测
本题总分:10 分
【问题描述】
新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准
备给大量民众进病毒核酸检测。
然而,用于检测的试剂盒紧缺。
为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k
个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k
个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明
至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,
如果检测前 k 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中
不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用
了 k + 1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能
最节省试剂盒?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题D 题解
这题数学问题 设总人数为pop,感染率p,每次k人,总市级数sum sum = ([pop/k]+1)*(1+k*p(k+1)) 这里的[pop/k]+1)即pop/k向上取整 [pop/k]+1)这里由于pop数量较大,所以这里向上取整的1可以忽略,这里直接取了pop/k,即 sum = (pop/k)*(1+kp(k+1)) 将p代入sum = (pop/k)*(1+k*0.01(k+1)) sum求导 = (pop/k)(0.01k-1/k) 可得当k = 10时,sum取最小值 所以K = 10
答案:
10
试题 E: REPEAT 程序
本题总分:15 分
【问题描述】
附件 prog.txt 中是一个用某种语言写的程序。
其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,
从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。
例如如下片段:
REPEAT 2:
A = A + 4
REPEAT 5:
REPEAT 6:
A = A + 5
A = A + 7
A = A + 8
A = A + 9
A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的
循环两次中。
REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。
A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。
请问该程序执行完毕之后,A 的值是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 E 答案
这题直接按流程算也挺简单
未说A初值,这里默认为0 REPEAT 6循环执行一次,A+30 REPEAT 5循环执行一次,A+185 REPEAT 2循环一次,A+4+185+8 = A+197 REPEAT 2循环后,A+394 最终:A+403
答案:
403
试题 F: 分类计数
时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分
【问题描述】
输入一个字符串,请输出这个字符串包含多少个大写字母,多少个小写字
母,多少个数字。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出三行,每行一个整数,分别表示大写字母、小写字母和数字的个数。
【样例输入】
1+a=Aab
【样例输出】
1
3
1
【评测用例规模与约定】
对于所有评测用例,字符串由可见字符组成,长度不超过 100。
试题F 题解
C/C++描述程序为:
#include <iostream> using namespace std; int main(){ string in; cin>>in; int num_digital,num_capital,num_lowercase;//数字,大写字母,小写字母的数量 num_capital = num_digital = num_lowercase = 0; int len_in = in.length(); for(int i = 0;i < len_in;i++){ if(in[i] <= '9' && in[i] >= '0') num_digital++; if((in[i] <= 'Z' && in[i] >= 'A')) num_capital++; if(in[i] <= 'z' && in[i] >= 'a') num_lowercase++; } cout<<num_capital<<endl<<num_lowercase<<endl<<num_digital; return 0; }
试题 G: 整除序列
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输
出这个序列中值为正数的项。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。
【样例输入】
20
【样例输出】
20 10 5 2 1
【评测用例规模与约定】
对于 80% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1018。
试题G 题解
我有点怀疑这是不是蓝桥杯的题目了
#include <iostream> using namespace std; int main(){ long long int n; cin>>n; while(n){ // 输出数据量较大,使用printf比较好 // 在蓝桥杯系统系统中,lld应使用%I64d printf("%lld ",n); n = n>>1; } return 0; }
试题 H: 走方格
时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分
【问题描述】
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,
从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下
走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
【输入格式】
输入一行包含两个整数 n, m。
【输出格式】
输出一个整数,表示答案。
【样例输入】
3 4
【样例输出】
2
【样例输入】
6 6
【样例输出】
0
【评测用例规模与约定】
对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。
试题H 题解
这题的这个数据量。。。直接暴力就完了,到这里我已经严重怀疑我拿到的是不是蓝桥杯的题目了。。。
#include <iostream> #include <vector> using namespace std; int main(){ int n,m; cin>>n>>m; vector<vector<int>> dp(n+1,vector<int>(m+1)); for(int i = 1;i <= n;i++){ dp[i][1] = 1; } for (int j = 1; j <= m; ++j) { dp[1][j] = 1; } for(int i = 2;i <= n;i++){ for (int j = 2; j <= m; ++j) { if(i%2==0 && j%2==0) continue; else dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } cout<<dp[n][m]; return 0; }
试题 I: 字符串编码
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
小明发明了一种给由全大写字母组成的字符串编码的方法。对于每一个大
写字母,小明将它转换成它在 26 个英文字母中序号,即 A → 1, B → 2, … Z →
26。
这样一个字符串就能被转化成一个数字序列:
比如 ABCXYZ → 123242526。
现在给定一个转换后的数字序列,小明想还原出原本的字符串。当然这样
的还原有可能存在多个符合条件的字符串。小明希望找出其中字典序最大的字
符串。
【输入格式】
一个数字序列。
【输出格式】
一个只包含大写字母的字符串,代表答案
【样例输入】
123242526
【样例输出】
LCXYZ
【评测用例规模与约定】
对于 20% 的评测用例,输入的长度不超过 20。
对于所有评测用例,输入的长度不超过 200000。
试题I 题解
#include <iostream> #include <vector> using namespace std; int main(){ string in ; cin>>in; int len = in.length(); string re = ""; int flag_1;//第一位为1 int flag_2;//第一位为2 flag_1 = flag_2 = 0; for(int i = 0;i < len;i++){ if(flag_1){ int mid = int(in[i-1]-'0')*10+int(in[i]-'0'); re += char(mid+'A'-1); flag_1 = 0; continue; } if(flag_2){ if(in[i]<='6'){ int mid = int(in[i-1]-'0')*10+int(in[i]-'0'); re += char(mid+'A'-1); flag_2 = 0; } else{ re += char(in[i-1] - '0' +'A'-1); re += char(in[i] - '0' +'A'-1); flag_2 = 0; } continue; } if(in[i] >= '3') re += char(in[i] - '0' + 'A' - 1); if(in[i] == '1' ){ if(i+2<=len-1 && in[i] == '0'){ re += char(in[i] - '0' + 'A' - 1); continue; } flag_1 = 1; } if(in[i] == '2'){ if(i+2<=len-1 && in[i] == '0'){ re += char(in[i] - '0' + 'A' - 1); continue; } flag_2 = 1; } } cout<<re; return 0; }
试题 J: 整数小拼接
时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分
【问题描述】
给定义个长度为 n 的数组 A1, A2, · · · , An。你可以从中选出两个数 Ai 和 Aj (i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。例如 12 和 345 可
以拼成 12345 或 34512 。注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便
是 Ai = Aj 时。
请你计算有多少种拼法满足拼出的整数小于等于 K。
【输入格式】
第一行包含 2 个整数 n 和 K。
第二行包含 n 个整数 A1, A2, · · · , An。
【输出格式】
一个整数代表答案。
【样例输入】
4 33
1 2 3 4
【样例输出】
8
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ N ≤ 1000, 1 ≤ K ≤ 108, 1 ≤ Ai ≤ 104。
对于所有评测用例,1 ≤ N ≤ 100000,1 ≤ K ≤ 1010,1 ≤ Ai ≤ 109。
试题J 题解
#include <iostream> #include <vector> #include <cmath> using namespace std; int get_len(int n){ int len = 1; n/=10; while (n){ len++; n/=10; } return len; } typedef struct ds{ int data; int len; }ds; bool cmp(ds a,ds b){ if(a.len < b.len) return 1; else return 0; } int main(){ int n; long long int k; cin>>n>>k; int mid = k; int len_k = 0; while (mid){ len_k++; mid/=10; } vector<ds> store; for (int i = 0; i < n; ++i) { // 蓝桥杯中long long int 读取需要使用%I64d scanf("%d",&mid); int len_mid = get_len(mid); if(len_mid < len_k) store.push_back({mid,len_mid}); } // 按长度从下到大排序 sort(store.begin(),store.end(),cmp); int i = 0,num=0; // 找出长度小于k长度1/2的,之前全排列 while (store[i].len < len_k/2){ num++; i++; } // 去除前num个 for(int j = 0; j < num;j++) store.erase(store.begin()); int sum = 0; if(num){ sum = 1; while (num){ sum *= num; num--; } } int len_store = store.size(); // 下面剩下程度为len_k/2 到len_k -1的,直接暴力吧 for (int i = 0; i < len_store; ++i) { for (int j = 0; j < i; ++j) { mid = store[i].data*pow(10,store[j].len) + store[j].data; if(mid<k) sum++; } for (int j = i+1; j < len_store; ++j) { mid = store[i].data*pow(10,store[j].len) + store[j].data; if(mid<k) sum++; } } cout<<sum; return 0; }
-
2020 第十一届蓝桥杯省赛C组试题
2020-10-17 17:43:562020 第十一届蓝桥杯省赛C组试题 2020 第十一届蓝桥杯省赛C组试题 2020 第十一届蓝桥杯省赛C组试题 2020 第十一届蓝桥杯省赛C组试题 2020 第十一届蓝桥杯省赛C组试题 -
C/C++描述 第十一届蓝桥杯省赛 C/C++ 大学B组 第一场(2020.7.5) 试题 题目+题解
2020-07-08 16:29:17# 第十一届蓝桥杯大赛软件类省赛 C/C++ 大学 B 组 @[TOC] # 第十一届蓝桥杯大赛软件类省赛 C/C++ 大学 B 组 【考生须知】 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试 题。 考试时间为 ...大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客
本文原创为亓官劼,请大家支持原创,部分平台一直在盗取博主的文章!!!
博主目前仅在CSDN中写博客,唯一博客更新的地址为:亓官劼的博客
最后两题还没看
第十一届蓝桥杯大赛软件类省赛 C/C++ 大学 B 组
文章目录
第十一届蓝桥杯大赛软件类省赛
C/C++ 大学 B 组
【考生须知】
考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试
题。
考试时间为 4 小时。考试期间选手可浏览自己已经提交的答案,被浏览的
答案允许拷贝。时间截止后,将无法继续提交或浏览答案。
对同一题目,选手可多次提交答案,以最后一次提交的答案为准。
选手必须通过浏览器方式提交自己的答案。选手在其它位置的作答或其它
方式提交的答案无效。
试题包含“结果填空”和“程序设计”两种题型。
结果填空题:要求选手根据题目描述直接填写结果。求解方式不限。不要
求源代码。把结果填空的答案直接通过网页提交即可,不要书写多余的内容。
程序设计题:要求选手设计的程序对于给定的输入能给出正确的输出结果。
考生的程序只有能运行出正确结果才有机会得分。
注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。
选手的程序必须是通用的,不能只对试卷中给定的数据有效。
对于编程题目,要求选手给出的解答完全符合 GNU C/C++ 标准,不能使
用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的 API。
代码中允许使用 STL 类库。
注意: main 函数结束必须返回 0
注意: 所有依赖的函数必须明确地在源文件中 #include ,不能通
过工程设置而省略常用头文件。
所有源码必须在同一文件中。调试通过后,拷贝提交。
提交时,注意选择所期望的编译器类型。
试题 A: 跑步训练
本题总分:5 分
【问题描述】
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟损耗
600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加都是
均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循
环。如果某个时刻小明的体力到达 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案。
答案中只填写数,不填写单位。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题A 题解
这里可以口算:答案为:
3880
10000 / (600-300) == 33.33 33*(600-300) = 9900 10000 - 9900 + 300 = 400 < 600 所以时间为32*2*60 + 400/10 = 3880
也可以写程序模拟:
energy = 10000 min = 0 second = 0 while(energy): min += 1 if min % 2 == 1: if energy > 600 : energy -= 600 else: min -= 1 second = energy/10 energy = 0 else: energy += 300 if energy <= 0: break print(min*60+second)
答案:
3880
试题 B: 纪念日
本题总分:5 分
【问题描述】
2020 年 7 月 1 日是***(敏感字)成立 99 周年纪念日。
***(敏感字)成立于 1921 年 7 月 23 日。
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包
含多少分钟?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题B 题解
这题直接程序算吧,或者Excel大法也行。这里用Python方便点,填空题随便用,Python代码为:
def fun(year): if (year%4==0 and year%100!=0) or year%400==0: return 366 return 365 day = 0 for i in range(1922,2021): day += fun(i) # 1921.7.23 到 2020.7.23的天数 # 再减22天 day = day - 22 min = day * 24 * 60 print(min)
答案:
52038720
试题 C: 合并检测
本题总分:10 分
【问题描述】
***(敏感字)由 ***(敏感字)引起,最近在 A 国蔓延,为了尽快控制 ***(敏感字),A 国准备给大量民众进病毒核酸检测。然而,用于检测的试剂盒紧缺。为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,如果检测前 k 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用了 k + 1 个试剂盒完成了 k 个人的检测。A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能最节省试剂盒?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题C 题解
这题数学问题 设总人数为pop,感染率p,每次k人,总市级数sum sum = ([pop/k]+1)*(1+k*p(k+1)) 这里的[pop/k]+1)即pop/k向上取整 [pop/k]+1)这里由于pop数量较大,所以这里向上取整的1可以忽略,这里直接取了pop/k,即 sum = (pop/k)*(1+kp(k+1)) 将p代入sum = (pop/k)*(1+k*0.01(k+1)) sum求导 = (pop/k)(0.01k-1/k) 可得当k = 10时,sum取最小值 所以K = 10
答案:
10
试题 D: REPEAT 程序
本题总分:10 分
【问题描述】
附件 prog.txt 中是一个用某种语言写的程序。
其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,
从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。
例如如下片段:
REPEAT 2:
A = A + 4
REPEAT 5:
REPEAT 6:
A = A + 5
A = A + 7
A = A + 8
A = A + 9
该片段中从 A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的
循环两次中。
REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。
A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。
请问该程序执行完毕之后,A 的值是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题D 题解
这题附件中的完整程序在:试题D附件程序
这题是填空题,所以我们还是可以使用Python来进行处理,可以方便点,当前,C/C++也是可以的,这里提供一个Python版本的处理方法
dir = '/Users/qiguan/Downloads/C++大学B组/REPEAT程序.txt' file = open(dir) data = file.read() len = data.__len__() def get_indent(i): now_indent = 0 while data[i] == ' ': now_indent = now_indent + 1 i = i + 1 return now_indent, i def get_flag(i): if data[i] == 'R': i = i + 7 return 1, i if data[i] == 'A': i = i + 8 return 2, i # 当前处理中的行前缩进空格数 indent = 0 # 控制下标 i = 5 # A的值 A = 0 # 乘数 multiplier = 1 # 乘数 集合 multiplier_list = [] flag = 0 while i != len: if data[i] == '\n': i = i + 1 if i >= len -1: break now_indent, i = get_indent(i) flag, i = get_flag(i) if now_indent < indent: multiplier /= multiplier_list[-1] multiplier_list.pop() if flag == 1: multiplier *= int(data[i]) multiplier_list.append(int(data[i])) i += 2 # A = A + if flag == 2: A += int(data[i])*multiplier i += 1 indent = now_indent print(A)
答案:
241830
第二种解法 ,正则表达式解法地址为:
试题 D: REPEAT 程序 多种解法(替换/正则)试题 E: 矩阵
本题总分:15 分
【问题描述】
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,同一
列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题E 题解
#include <iostream> #include <vector> using namespace std; int main(){ vector<vector<int>> dp(2021,vector<int>(1011)); dp[1][1] = 1; for (int i = 2; i <= 2020; ++i) { for (int j = 1; j <= i; ++j) { dp[i][j] += dp[i-1][j-1]; if(i-j<=j){ dp[i][j] += dp[i-1][j]; } dp[i][j] %= 2020; } } cout<<dp[2020][1010]; return 0; }
答案:
1340
试题 F:整除序列
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15 分
【问题描述】
有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,请输
出这个序列中值为正数的项。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。
【样例输入】
20
【样例输出】
20 10 5 2 1
【评测用例规模与约定】
对于 80% 的评测用例,1 ≤ n ≤ 10^9。
对于所有评测用例,1 ≤ n≤ 10^18。
试题F 题解
#include <iostream> using namespace std; int main(){ long long int n; cin>>n; while(n){ // 输出数据量较大,使用printf比较好 // 在蓝桥杯系统系统中,lld应使用%I64d,测试了下,在蓝桥杯练习系统中,使用%lld也可以正常输出 printf("%lld ",n); n = n>>1; } return 0; }
试题 G: 解码
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
小明有一串很长的英文字母,可能包含大写和小写。
在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字母表
达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。
例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写成 a4a、
aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方便表
达,小明不会将连续的超过 9 个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出一个字符串,表示还原后的串。
【样例输入】
H3el5o2
【样例输出】
HHHellllloo
【评测用例规模与约定】
对于所有评测用例,字符串由大小写英文字母和数字组成,长度不超过
100。
请注意原来的串长度可能超过 100。
试题G 题解
#include <iostream> #include <string> #include <cstring> #include <cstdio> using namespace std; int main(){ string a; getline(cin,a); int len = a.length(); string re = ""; bool flag = false; for(int i = 0 ; i < len;i++){ if(a[i] < '2' || a[i] > '9'){ re = re + a[i]; flag = true; } else{ // 前一个为非2-9,且这次为2-9数字 if(flag){ int num = int(a[i] - '0') - 1; for (int j = 0; j < num; ++j) { re = re + a[i-1]; } flag = false; } else{ re = re + a[i]; } } } cout<<re; return 0; }
另一种简短解法:
#include <iostream> #include <vector> using namespace std; int main(){ string a; string re = ""; cin>>a; int len = a.length(); for(int i = 0 ; i < len ; i++){ if(a[i] < '2' || a[i] > '9'){ re = re + a[i]; }else{ int j = int(a[i] - '0' - 1); while(j--) re = re + a[i-1]; } } cout<<re; return 0; }
试题 H: 走方格
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,
从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下
走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
【输入格式】
输入一行包含两个整数 n, m。
【输出格式】
输出一个整数,表示答案。
【样例输入】
3 4
【样例输出】
2
【样例输入】
6 6
【样例输出】
0
【评测用例规模与约定】
对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。
试题H 题解
这题的这个数据量。。。直接暴力就完了,到这里我已经严重怀疑我拿到的是不是蓝桥杯的题目了。。。
#include <iostream> #include <vector> using namespace std; int main(){ int n,m; cin>>n>>m; vector<vector<int>> dp(n+1,vector<int>(m+1)); for(int i = 1;i <= n;i++){ dp[i][1] = 1; } for (int j = 1; j <= m; ++j) { dp[1][j] = 1; } for(int i = 2;i <= n;i++){ for (int j = 2; j <= m; ++j) { if(i%2==0 && j%2==0) continue; else dp[i][j] = dp[i-1][j] + dp[i][j-1]; } } cout<<dp[n][m]; return 0; }
试题 I: 整数拼接
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
给定义个长度为 n 的数组 A1, A2, · · · , An。你可以从中选出两个数 Ai 和 Aj
(i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。例如 12 和 345 可
以拼成 12345 或 34512。注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,即便
是 Ai= Aj 时。
请你计算有多少种拼法满足拼出的整数是 K 的倍数。
【输入格式】
第一行包含 2 个整数 n 和 K。
第二行包含 n 个整数 A1,A2, · · · , An。
【输出格式】
一个整数代表答案。
【样例输入】
4 2
1 2 3 4
【样例输出】
6
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n≤ 1000, 1 ≤ K ≤ 20, 1 ≤ Ai ≤ 10^4。
对于所有评测用例,1 ≤ n≤ 10^5,1 ≤ K≤ 10^5,1 ≤ Ai ≤ 10^9。
试题 J: 网络分析
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
小明正在做一个网络实验。
他设置了 n 台电脑,称为节点,用于收发和存储数据。
初始时,所有节点都是独立的,不存在任何连接。
小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相通信
了。两个节点如果存在网线连接,称为相邻。
小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会发送
到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有直接
或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储下来。
一条信息只存储一次。
给出小明连接和测试的过程,请计算出每个节点存储信息的大小。
【输入格式】
输入的第一行包含两个整数 n,m,分别表示节点数量和操作数量。节点从
1 至 n 编号。
接下来 m 行,每行三个整数,表示一个操作。
如果操作为 1 a b,表示将节点a 和节点 b 通过网线连接起来。当 a = b
时,表示连接了一个自环,对网络没有实质影响。
如果操作为 2 p t,表示在节点 p 上发送一条大小为 t 的信息。
【输出格式】
输出一行,包含 n 个整数,相邻整数之间用一个空格分割,依次表示进行
完上述操作后节点 1 至节点 n 上存储信息的大小。
【样例输入】
4 8
1 1 2
2 1 10
2 3 5
1 4 1
2 2 2
1 1 2
1 2 4
2 2 1
【样例输出】
13 13 5 3
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n ≤ 20,1 ≤ m ≤ 100。
对于 50% 的评测用例,1 ≤ n ≤ 100,1 ≤ m ≤ 1000。
对于 70% 的评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 10000。
对于所有评测用例,1 ≤ n ≤ 10000,1 ≤ m ≤ 100000,1 ≤ t ≤ 100。
-
第十一届蓝桥杯省赛模拟试题——智能门锁
2020-10-15 15:27:40第十一届蓝桥杯省赛模拟试题——智能门锁,所有功能都已正常实现 第十一届蓝桥杯省赛模拟试题——智能门锁,所有功能都已正常实现 -
第十一届蓝桥杯省赛C语言B组.docx
2021-03-12 20:08:38第十一届蓝桥杯省赛C语言B组.docx -
【通电】第十一届蓝桥杯省赛第二次模拟(并查集+Kruskal)
2020-09-02 20:27:122015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。【问题描述】
2015年,全中国实现了户户通电。作为一名电力建设者,小明正在帮助一带一路上的国家通电。
这一次,小明要帮助 n 个村庄通电,其中 1 号村庄正好可以建立一个发电站,所发的电足够所有村庄使用。
现在,这 n 个村庄之间都没有电线相连,小明主要要做的是架设电线连接这些村庄,使得所有村庄都直接或间接的与发电站相通。
小明测量了所有村庄的位置(坐标)和高度,如果要连接两个村庄,小明需要花费两个村庄之间的坐标距离加上高度差的平方,形式化描述为坐标为 (x_1, y_1) 高度为 h_1 的村庄与坐标为 (x_2, y_2) 高度为 h_2 的村庄之间连接的费用为:
sqrt((x_1-x_2)(x_1-x_2)+(y_1-y_2)(y_1-y_2))+(h_1-h_2)*(h_1-h_2)。
在上式中 sqrt 表示取括号内的平方根。请注意括号的位置,高度的计算方式与横纵坐标的计算方式不同。
由于经费有限,请帮助小明计算他至少要花费多少费用才能使这 n 个村庄都通电。
【输入格式】
输入的第一行包含一个整数 n ,表示村庄的数量。
接下来 n 行,每个三个整数 x, y, h,分别表示一个村庄的横、纵坐标和高度,其中第一个村庄可以建立发电站。
【输出格式】
输出一行,包含一个实数,四舍五入保留 2 位小数,表示答案。
【样例输入】
4
1 1 3
9 9 7
8 8 6
4 5 4
【样例输出】
17.41
【评测用例规模与约定】
对于 30% 的评测用例,1 <= n <= 10;
对于 60% 的评测用例,1 <= n <= 100;
对于所有评测用例,1 <= n <= 1000,0 <= x, y, h <= 10000。思路分析:题目的意思大概是说:现在我有n个结点,每个结点都有三个属性,通过两个结点的三个属性可以算出这两个结点相连边的权值大小。题目要求所有n个村庄全部通电,就是让所有点都连通起来,而又要求代价最小,其实就是求该无向网的最小生成树。求最小生成树的算法常见的有prim算法和Kruskal算法,我比较熟悉后一种,所以这里就选择用Kruskal算法来解决该问题。
Kruskal算法的具体讲解可参考:【灾后重建】蓝桥杯第六届省赛C/C++大学A组(并查集+Kruskal算法)这里就直接上代码了:
#include<bits/stdc++.h> using namespace std; const int maxn = 1002; int n, par[maxn]; //定义结点 struct node { int x; int y; int h; }nodes[maxn]; //定义边 struct edge { int start; int end; float cost; }edges[maxn * (maxn - 1) / 2]; //计算代价 float cost(node a, node b) { float x = a.x - b.x; float y = a.y - b.y; float h = a.h - b.h; return sqrt(x * x + y * y) + h * h; } //并查集的一些操作 //求根结点 int get_root(int a) { if(par[a] != a) { par[a] = get_root(par[a]); } return par[a]; } //查询是否在同一集合中 bool query(int a,int b) { return get_root(a) == get_root(b); } //合并两个结点 void merge(int a,int b) { par[get_root(a)] = get_root(b); } //初始化 void init(int n) { for(int i = 1;i <= n;i++) { par[i] = i; } } bool cmp(edge x, edge y) { return x.cost < y.cost; } int main() { cin >> n; init(n); int x, y, h; int index = 0; for(int i = 0; i < n; i++) { cin >> nodes[i].x >> nodes[i].y >> nodes[i].h; } //生成所有边的序号,其实就是组合数 for(int i = 0; i < n; i++) { for(int j = 0; j < n && j != i; j++) { edges[index].start = i; edges[index].end = j; edges[index].cost = cost(nodes[i], nodes[j]); index++; } } //按cost从小到大排序 sort(edges, edges + index, cmp); float sum = 0.0; int cnt = 0; //在不形成环的条件下依次选择n - 1条边,并把它们的权值相加输出 for(int i = 0; i < index; i++) { int start = edges[i].start; int end = edges[i].end; if(get_root(start) != get_root(end)) { cnt++; merge(start, end); sum += edges[i].cost; if(cnt == n - 1) { break; } } } printf("%.2f", sum); return 0; }
-
第十一届蓝桥杯省赛真题之 寻找 2020配套文档.zip
2021-03-06 16:54:52第十一届蓝桥杯省赛真题之 寻找 2020配套文档 -
2020年第十一届蓝桥杯省赛C++大学A组真题(第二场)
2020-10-17 21:06:362020年第十一届蓝桥杯省赛 C++大学A组 试题(2020.10.17第二场) 比赛时间:2020.10.17 -
2020年第十一届蓝桥杯省赛C++大学A组真题(第三场)
2020-10-18 21:34:332020年第十一届蓝桥杯省赛 C++大学A组 试题(2020.10.18第三场) 比赛时间:2020.10.18 -
2020第十一届蓝桥杯省赛B组第一场
2020-07-06 21:52:242020第十一届蓝桥杯省赛B组第一场明日更新答案试题 A: 跑步训练问题描述题解试题 B: 纪念日问题描述题解试题 C: 合并检测问题描述题解试题 D: REPEAT 程序问题描述题解试题 E: 矩阵问题描述题解试题 F: 整除序列问题...2020第十一届蓝桥杯省赛B组第一场
明日更新答案
试题 A: 跑步训练
问题描述
本题总分:5 分
【问题描述】
小明要做一个跑步训练。
初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟600 的体力。如果小明休息,每分钟增加 300 的体力。体力的损耗和增加均匀变化的。
小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如环。如果某个时刻小明的体力到达 0,他就停止锻炼。
请问小明在多久后停止锻炼。为了使答案为整数,请以秒为单位输出答案中只填写数,不填写单位。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题解
答案:3880
public class Test_C { public static void main(String[] args) { int HP = 10000; int t = 0; while (true) { if (HP >= 600) { HP -= 600; t += 60; } else { break; } if (HP > 0) { HP += 300; t += 60; } } t += 60 * HP / 600; System.out.println(t); } }
试题 B: 纪念日
问题描述
本题总分:5 分
【问题描述】
2020 年 7 月 1 日是中国某党成立 99 周年纪念日。
中国某党成立于 1921 年 7 月 23 日。
请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一含多少分钟?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题解
答案:52038720
import java.util.Date; public class Test_B { public static void main(String[] args) { Date date1 = new Date(21, 6, 23, 12, 0, 0); System.out.println(date1); Date date2 = new Date(120, 6, 1, 12, 0, 0); System.out.println(date2); long time = date2.getTime() - date1.getTime(); System.out.println(time / (60000)); } }
试题 C: 合并检测
问题描述
本题总分:10 分
【问题描述】
新冠疫情由新冠病毒引起,最近在 A 国蔓延,为了尽快控制疫情,A 国准
备给大量民众进病毒核酸检测。
然而,用于检测的试剂盒紧缺。
为了解决这一困难,科学家想了一个办法:合并检测。即将从多个人(k
个)采集的标本放到同一个试剂盒中进行检测。如果结果为阴性,则说明这 k
个人都是阴性,用一个试剂盒完成了 k 个人的检测。如果结果为阳性,则说明
至少有一个人为阳性,需要将这 k 个人的样本全部重新独立检测(从理论上看,
如果检测前 k - 1 个人都是阴性可以推断出第 k 个人是阳性,但是在实际操作中
不会利用此推断,而是将 k 个人独立检测),加上最开始的合并检测,一共使用
了 k + 1 个试剂盒完成了 k 个人的检测。
A 国估计被测的民众的感染率大概是 1%,呈均匀分布。请问 k 取多少能
最节省试剂盒?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题解
答案:10
假设A国有n个人,感染者有n/100
每k个人一组,共n/k组,共用n/k瓶试剂
按照最坏的情况,每多出一个感染者就多用k瓶试剂,
因此共用n/k+(n/100)*k瓶试剂
n是定值,所以求(1/k+k/100)最小
由于a+b>=2√ab
当且仅当a = b时,取等号
即1/k=k/100时,取得最小值
解得k = 10试题 D: REPEAT 程序
问题描述
文件链接本题附件地址
本题总分:15 分
【问题描述】
附件 prog.txt 中是一个用某种语言写的程序。
其中 REPEAT k 表示一个次数为 k 的循环。循环控制的范围由缩进表达,
从次行开始连续的缩进比该行多的(前面的空白更长的)为循环包含的内容。
例如如下片段:REPEAT 2: A = A + 4 REPEAT 5: REPEAT 6: A = A + 5 A = A + 7 A = A + 8 A = A + 9
A = A + 4 所在的行到 A = A + 8 所在的行都在第一行的
循环两次中。
REPEAT 6: 所在的行到 A = A + 7 所在的行都在 REPEAT 5: 循环中。
A = A + 5 实际总共的循环次数是 2 × 5 × 6 = 60 次。
请问该程序执行完毕之后,A 的值是多少?
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题解
答案:241830
这道题用python比较简单,因为python的循环也是根据缩进。
只需这样
样例
执行
完事。试题 E: 矩阵
问题描述
本题总分:15 分
【问题描述】
把 1 ∼ 2020 放在 2 × 1010 的矩阵里。要求同一行中右边的比左边大,列中下边的比上边的大。一共有多少种方案?
答案很大,你只需要给出方案数除以 2020 的余数即可。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。题解
public class Test_E { public static void main(String[] args) { int[][] dp = new int[2021][2021]; dp[1][1] = 1; // 1必然放在第一行 for (int i = 2; i <= 2020; i++) { for (int j = 1; j <= i; j++) { dp[i][j] += dp[i - 1][j - 1]; if (i - j <= j) { dp[i][j] += dp[i - 1][j]; } dp[i][j] %= 2020; } } System.out.println(dp[2020][1010]); } }
试题 F: 整除序列
问题描述
时间限制: 1.0s 内存限制: 256.0MB 本题总分:15
【问题描述】
有一个序列,序列的第一个数是 n,后面的每个数是前一个数整除 2,出这个序列中值为正数的项。
【输入格式】
输入一行包含一个整数 n。
【输出格式】
输出一行,包含多个整数,相邻的整数之间用一个空格分隔,表示答案。
【样例输入】20
【样例输出】
20 10 5 2 1
【评测用例规模与约定】
对于 80% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1018。题解
import java.util.Scanner; public class Test_G { public static void main(String[] args) { Scanner sc = new Scanner(System.in); long n = sc.nextInt(); while (n > 0) { System.out.print(n + " "); n = n >> 1; } } }
试题 G: 解码
问题描述
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
小明有一串很长的英文字母,可能包含大写和小写。
在这串字母中,有很多连续的是重复的。小明想了一个办法将这串字达得更短:将连续的几个相同字母写成字母 + 出现次数的形式。
例如,连续的 5 个 a,即 aaaaa,小明可以简写成 a5(也可能简写aa3a 等)。对于这个例子:HHHellllloo,小明可以简写成 H3el5o2。为了方达,小明不会将连续的超过 9 个相同的字符写成简写的形式。
现在给出简写后的字符串,请帮助小明还原成原来的串。
【输入格式】
输入一行包含一个字符串。
【输出格式】
输出一个字符串,表示还原后的串。
【样例输入】H3el5o2
【样例输出】
HHHellllloo
【评测用例规模与约定】
对于所有评测用例,字符串由大小写英文字母和数字组成,长度不100。
请注意原来的串长度可能超过 100。题解
import java.util.Scanner; public class Test_G { public static void main(String[] args) { Scanner input = new Scanner(System.in); char[] s = input.next().toCharArray(); input.close(); StringBuilder newStr = new StringBuilder(""); for (int i = 0; i < s.length; i++) { char c = s[i]; if (c >= '0' && c <= '9') { char temp = s[i - 1]; int n = c - '0'; for (int j = 1; j < n; j++) { newStr.append(temp); } } else { newStr.append(c); } } System.out.println(newStr); } }
试题 H: 走方格
问题描述
时间限制: 1.0s 内存限制: 256.0MB 本题总分:20 分
【问题描述】
在平面上有一些二维的点阵。
这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 从左到右依次为第 1 至第 m 列,每一个点可以用行号和列号来表示。
现在有个人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者走。
注意,如果行号和列数都是偶数,不能走入这一格中。
问有多少种方案。
【输入格式】
输入一行包含两个整数 n, m。
【输出格式】
输出一个整数,表示答案。
【样例输入】3 4
【样例输出】
2
【样例输入】
6 6
【样例输出】
0
【评测用例规模与约定】
对于所有评测用例,1 ≤ n ≤ 30, 1 ≤ m ≤ 30。题解
import java.util.Scanner; public class Test_H { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); int[][] grid = new int[n][m]; for (int i = 0; i < n; i++) { grid[i][0] = 1; } for (int i = 0; i < m; i++) { grid[0][i] = 1; } for (int i = 1; i < n; i++) { for (int j = 1; j < m; j++) { if (i % 2 == 1 && j % 2 == 1) { continue; } grid[i][j] = grid[i - 1][j] + grid[i][j - 1]; } } System.out.println(grid[n - 1][m - 1]); } }
试题 I: 整数拼接
问题描述
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
给定义个长度为 n 的数组 A1, A2, · · · , An。你可以从中选出两个数 Ai (i 不等于 j),然后将 Ai 和 Aj 一前一后拼成一个新的整数。例如 12 和 以拼成 12345 或 34512。注意交换 Ai 和 Aj 的顺序总是被视为 2 种拼法,是 Ai = Aj 时。
请你计算有多少种拼法满足拼出的整数是 K 的倍数。
【输入格式】
第一行包含 2 个整数 n 和 K。
第二行包含 n 个整数 A1, A2, · · · , An。
【输出格式】
一个整数代表答案。
【样例输入】4 2 1 2 3 4
【样例输出】
6
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n ≤ 1000, 1 ≤ K ≤ 20, 1 ≤ Ai ≤ 104。
对于所有评测用例,1 ≤ n ≤ 105,1 ≤ K ≤ 105,1 ≤ Ai ≤ 109。题解
试题 J: 网络分析
问题描述
时间限制: 1.0s 内存限制: 256.0MB 本题总分:25 分
【问题描述】
小明正在做一个网络实验。
他设置了 n 台电脑,称为节点,用于收发和存储数据。
初始时,所有节点都是独立的,不存在任何连接。
小明可以通过网线将两个节点连接起来,连接后两个节点就可以互相了。两个节点如果存在网线连接,称为相邻。
小明有时会测试当时的网络,他会在某个节点发送一条信息,信息会到每个相邻的节点,之后这些节点又会转发到自己相邻的节点,直到所有或间接相邻的节点都收到了信息。所有发送和接收的节点都会将信息存储一条信息只存储一次。
给出小明连接和测试的过程,请计算出每个节点存储信息的大小。
【输入格式】
输入的第一行包含两个整数 n, m,分别表示节点数量和操作数量。节1 至 n 编号。
接下来 m 行,每行三个整数,表示一个操作。
如果操作为 1 a b,表示将节点 a 和节点 b 通过网线连接起来。当 时,表示连接了一个自环,对网络没有实质影响。
如果操作为 2 p t,表示在节点 p 上发送一条大小为 t 的信息。
【输出格式】
输出一行,包含 n 个整数,相邻整数之间用一个空格分割,依次表示完上述操作后节点 1 至节点 n 上存储信息的大小。
【样例输入】4 8 1 1 2 2 1 10 2 3 5 1 4 1 2 2 2 1 1 2 1 2 4 2 2 1
【样例输出】
13 13 5 3
【评测用例规模与约定】
对于 30% 的评测用例,1 ≤ n ≤ 20,1 ≤ m ≤ 100。
对于 50% 的评测用例,1 ≤ n ≤ 100,1 ≤ m ≤ 1000。
对于 70% 的评测用例,1 ≤ n ≤ 1000,1 ≤ m ≤ 10000。
对于所有评测用例,1 ≤ n ≤ 10000,1 ≤ m ≤ 100000,1 ≤ t ≤ 100。题解
-
2020第十一届蓝桥杯省赛C组第一场
2020-07-06 14:29:542020第十一届蓝桥杯省赛第一场试题试题 A: 指数计算问题描述代码实现试题 B: 解密问题描述代码实现试题 C: 跑步训练问题描述代码实现试题 D: 合并检测问题描述代码实现试题 E: REPEAT 程序问题描述代码实现试题 F: ... -
第十一届蓝桥杯省赛C++ B组
2020-10-16 22:34:49文章目录第十一届蓝桥杯省赛C++ B组(7.25)A:跑步训练B.纪念日C: 合并检测D: REPEAT 程序E: 矩阵F:整除序列G: 解码H: 走方格I: 整数拼接J: 网络分析 第十一届蓝桥杯省赛C++ B组(7.25) A:跑步训练 题意: 本题总分... -
Python描述 第十一届蓝桥杯省赛第一场 试题 I: 字符串编码
2020-10-16 11:57:59第十一届蓝桥杯省赛 第一场试题 I: 字符串编码 大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客 本文原创为亓官劼,请大家支持原创... -
第十一届蓝桥杯省赛电子组单片机类试题
2021-03-02 09:58:08第十一届蓝桥杯省赛电子组单片机类试题客观题程序设计题 客观题 程序设计题 -
第十一届蓝桥杯省赛B组 2020 C/C++
2021-03-20 11:15:19第十一届蓝桥杯省赛B组(2020年) C/C++ -
C/C++第十一届蓝桥杯省赛B组第二场比赛
2020-10-17 20:11:00第十一届蓝桥杯省赛C/C++组第二场比赛 有错误各位大佬指出来哈。 1.找"2" 答案:624 #include <iostream> #include <algorithm> using namespace std; int cnt(int num) { int ans=0; while(num) { ... -
第十一届蓝桥杯python试题_Python描述 第十一届蓝桥杯省赛第一场 试题 I: 字符串编码...
2020-11-30 02:11:30对于每一个大 写字母 小明将它转换成它在 26 个英文字母中序号 即 A →第十一届蓝桥杯省赛 第一场试题 I: 字符串编码??大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,... -
第十一届蓝桥杯省赛国赛总结
2020-11-15 15:24:45第十一届蓝桥杯省赛国赛总结 java C菜鸡 大二第一次参加蓝桥杯,啥算法也不会就硬着头皮冲。 省赛:当时抱着拿省三的心态参加,做题过程中也遇到好多不会的。数日历那道题,考试的时候点开的win10自带的日历,数了一... -
第十一届蓝桥杯省赛-整数拼接
2020-07-19 12:26:19第十一届蓝桥杯省赛-整数拼接题目暴力做法 O(n2)优化做法 O(nlog10(n)) 题目 暴力做法 O(n2) 题目意思很清楚,从n个数中任意选两个不重复的数,将其拼接起来,将拼接后的数对K求余,如果余数为零则代表是K的倍数。... -
第十一届蓝桥杯省赛-走方格
2020-07-19 13:15:28第十一届蓝桥杯省赛-走方格题目DFS动态规划 题目 DFS 拿到题目很容易想到DFS,但是只能向下走和向右走,并且偶数格不能走。但是数据量大的话会超时,不过比赛的时候可以偷偷打个表。 #include <iostream> ... -
第十一届蓝桥杯省赛C组Java试题
2020-10-18 10:15:23第十一届蓝桥杯第二次省赛C组Java试题,pdf格式可以复制。试题A: 约数个数;试题B: 寻找2020;试题C: 跑步锻炼;试题D: 平面分割;试题E: 七段码;试题F: 成绩统计;试题G: 单词分析;试题H: 数字三角形;试题I: ... -
第十一届蓝桥杯省赛第二场C/C++ B组题解
2021-03-15 20:44:26第十一届蓝桥杯省赛第二场C/C++ B组 A.门牌制作 题意:制作从1到2020这些数字里面需要使用后多少个字符2; 思路:for循环,并且把数字拆分,从每一位去判断。 代码: #include<bits/stdc++.h> using namespace... -
第十一届蓝桥杯省赛真题——单词分析
2021-03-10 12:50:23第十一届蓝桥杯省赛真题——单词分析 单词分析: 【问题描述】 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。 小蓝学了很长时间也记不住一些... -
第十一届蓝桥杯省赛JavaC组第三题跑步锻炼
2021-04-11 16:16:02第十一届蓝桥杯省赛JavaC组第三题跑步锻练 题目 package Work11; public class T03 { /* * 先设定一个类判断是否为闰年 闰年可以被4整除,但不能被100整数 ,或 可以被400整除 * 再设定一个日期数组,存放每个月... -
CC++描述 第十一届蓝桥杯省赛CC++大学B组 第一场(2020.7.5) 题目+题解
2020-07-07 12:11:41第十一届蓝桥杯省赛CC++大学B组 第一场(2020.7.5) C/C++描述 题目+题解 -
2020年第十一届蓝桥杯省赛B组第一场[Java]
2021-01-15 20:25:422020年第十一届蓝桥杯省赛B组[Java] 试题 A: 组队 问题描述 本题总分:5 分 【问题描述】 小明要做一个跑步训练。 初始时,小明充满体力,体力值计为 10000。如果小明跑步,每分钟600 的体力。如果小明休息,每分钟... -
2020第十一届蓝桥杯省赛(c/c++)试题G:回文日期
2021-02-25 01:08:132020第十一届蓝桥杯省赛(c/c++)试题G:回文日期 2020第十一届蓝桥杯省赛(c/c++)试题G:回文日期 大概步骤 1.用int装日期 2.将其分开年月日方便月份和年份的递增 3.放到数组中判断是否回文日期 4.回文日期+a[0]==... -
第十一届蓝桥杯省赛第一场C/C++B组题目与个人解答
2020-10-08 15:46:46第十一届蓝桥杯省赛C/C++B组题目与个人解答)试题 A: 跑步训练试题B:纪念日试题C:合并检测试题D:REPEAT程序试题E:矩阵试题F:整除序列试题G: 解码试题H: 走方格试题 I: 整数拼接试题 J: 网络分析 试题 A: 跑步训练 ... -
第十一届蓝桥杯省赛第二场真题(python组)——平面切分
2021-03-14 11:32:51第十一届蓝桥杯省赛第二场真题(python组)——平面切分(注释详细) 试题 I: 平面切分 时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分 【问题描述】 平面上有 N 条直线,其中第 i 条直线是 y = Ai · x + Bi。...