2020蓝桥杯C++B组省赛第二场个人感受和个人题解

[2020**蓝桥杯C++B组省赛第二场个人感受和题解]

简单的个人感受

时间回到之前打校内模拟,那时候校排名11+,省排40+;感觉不尽人意,毕竟之前正常打比赛都能排很靠前,可能是我没认真打,也可能线上打水分有点大,总之那时候我觉得要不是自己能力欠缺,要不就环境太水了。

后面真正到快开始比赛的前一周我才开始准备蓝桥杯,看了很多博客,和去年真题,感觉听起来拿奖挺容易的,听起来省一有手就行。就也没顾及太多东西了。

打的那天我是很平和的心态,感觉能赢就冲刺一下,就冲刺一把,能参加国赛就去北京玩玩。结果比赛的机子和环境直接爆炸,我写完前面5个填空都没检查,想着后面回来测试代码,结果电脑死机,代码直接没了,中途等待换机耽误了半个小时,最后提交最后一个题目30%样例还发现比赛提前2分钟结束了,直接少了7.5分,而且压根不会给你补时间。。总之种种现场情况恶心到我了。而且很多人也出现类似我的情况。

打完后就没心情对答案了,就隔了好久,才无意间打开博客随便逛了逛,发现好像我挺走运的,完全没检查过的填空题一遍过全对了,然后除了最后没交上的7.5其他貌似都还行。

最后出成绩也在意料之中,省一,貌似也是省内b组排第6(如果7.5分加上可能还能冲一冲),但省一的确太多了,最神奇的理论就是电脑出问题的人省一都稳了。

最后的最后,,就是还要交300打国赛,而且又是在学校线上考试,,害,这比赛就没什么仪式感了,真花钱买证。无解~

建议与小技巧

  1. 熟练Excel
  2. 对于日期模拟时钟时间模拟一定要熟练
  3. 熟悉使用next_permutation全排列和二分查找等常见函数
  4. 能用long long 就别用int,很多题目就卡int 范围
  5. 了解常见的优化时间方法:scanf printf替代cin cout,变量的外部定义等等
  6. 熟悉Dev编译器的使用,学会查询api文档,或者干脆就记下常用的就行
  7. 切记需要return 0,正确使用标准库,和C版本,别写过时代码,也别写超前代码,老老实实走。
  8. 看好时间,有时候提前开考也会提前结束,实际要看比赛倒计时为准,别觉得时间充分就一开始慢悠悠的做。要尽快的写下去,后面有时间再回来。

前言

10月17日,蓝桥杯B组省赛第二场;
答案是我自己的,,不一定正确~~
分享题目+答案+思路
代码之后更新

一、试题A 门牌制作

【答案】

答案:624

本题总分:5 分

【问题描述】

小蓝要为一条街的住户制作门牌号。这条街一共有2020 位住户,门牌号从1 到2020 编号。小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。请问要制作所有的1 到2020 号门牌,总共需要多少个字符2?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码

待更新
思路:暴力循环查找2的个数

二、试题B: 既约分数

【答案】

答案: 2481215

本题总分:5 分

【问题描述】

如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。例如,3/4 , 5/2 , 1/8 , 7/1都是既约分数。请问,有多少个既约分数,分子和分母都是1 到2020 之间的整数(包括1和2020)?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码

待更新
思路:暴力双重for循环查找__gcd(i,j) == 1的个数(可能有坑?但感觉是直接1-2020循环没有特例)

三、试题C 蛇形填数s

【答案】

答案:761
本题总分:10 分

【问题描述】

如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。
2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第1张图片

容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码

待更新
1.暴力Excel解题,随手拉一拉,答案瞬间出来
2.数组填数即可
cnt = 1;
num[1][1] = cnt++;
int x = 0,y = 2;
while(退出条件){
	x++;
	while(y>0){
		num[x++][y--] = cnt++;
	}
	y++;
	while(x>0){
		num[x--][y++] = cnt++;
	}
}
即可

四、试题D 跑步锻炼

【答案】

答案:8879

2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第2张图片

代码

待更新
注意时间是包含关系,通过正常日期增加去判断即可;初始是周六,最后是周日,这里可以代码验证,好像也有excel大佬破解的;

五、试题E: 七段码

【答案】

答案:80

本题总分:10 分

【问题描述】

小蓝要用七段码数码管来表示一种特殊的文字。
上图给出了七段码数码管的一个图示,数码管中一共有7 段可以发光的二极管,分别标记为a, b, c, d, e, f, g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
例如:b 发光,其他二极管不发光可以用来表达一种字符。
例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?

【答案提交】

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第3张图片

a b c
f g c
e e d

代码:

待更新
把相邻的看成一个二维数组(如上,个别考虑cc和ee两个),dfs枚举01情况即可,注意0000000不行。

六、试题F 成绩分析

2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第4张图片

【思路】

待更新
思路:暴力暴力,破解就是了

七、试题G 回文日期

2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第5张图片

【思路】

待更新
上面有个日期的了,这次也是按照day++。依次去判断,判断很好写的,就不说了,暴力就是了;

八、试题 H:字串分值

2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第6张图片

【样例输入】

ababc

【样例输出】

21

【样例说明】

子串f值:

a     1
ab    2
aba   1
abab  0
ababc 1
 b    1
 ba   2
 bab  1
 babc 2
  a   1
  ab  2
  abc 3
   b  1
   bc 2
    c 1

【评测用例规模与约定】

对于20% 的评测用例,1 ≤ n ≤ 10;
对于40% 的评测用例,1 ≤ n ≤ 100;
对于50% 的评测用例,1 ≤ n ≤ 1000;
对于60% 的评测用例,1 ≤ n ≤ 10000;
对于所有评测用例,1 ≤ n ≤ 100000。

【思路】

待更新
第八题忘记了0.0;
思路,这题案结果要倒着看就很简单
先定义一个填充数据的int numcnt[100000][27];
前面100000对应第几个数,后面1-26个对应填充的字母,numcnt[i][0] 0位计数,a对应1,b对应2;
cin >> str;
reverse(str.begin(),str.end());
for(i = 0; i < str.length(); i++){
	for(j = 0; j <= i; j++){
		if(numcnt[i][str[i]-'a'+1] == 0){   //str[i]-'a'+1就把abc转换123
			numcnt[i][0]++;
		}
		numcnt[i][str[i]-'a'+1]++;  //标记有了
		ans += numcnt[i][str[i]-'a'+1];  //每次加入ans即可
	}
}
cout << ans;

九、试题 I: 平面切分

题目忘了,没找到

【思路】

本题关键是推出  
1.切分平面和  几条线~几个交点的关系
2.在去找输入的线段有几个交点
对于一:首先找到i条线最多切分几个平面,最多几个点;
	   dpArea[i] = i + dpArea[i-1]
	   dpPoint[i] = i - 1 + dpPoint[i-1]
	   然后发现规律如果交点没达到最多交点,有 
	   【分割平面 = i条线对应最大分割平面 - (i条线最大交点 - 线段i)】
	   这时候发现很多都能对应,但如果都交与一个点就不合适了
	   但不着急,判断线段的时候是两层for循环依次输入和前面的判断是否平行的。
	   每次i 对应 j循环就判断如果同一个交点就算一个一个,此时所有情况满足
对于二:for(int i = 0; i < n; i++){
			输入线段
			for(int j = 0; j < i; j++){
				//每条线段和前面已经输入的判断是否平行(A1 == A2)
				如果平行
					不敢啥
				如果重合
					当作初始线段减少1,并且后面的线段不和它进行判断
				如果相交{
					如果交点在j的循环内例遍过
						交点不变
					否则
						交点++,标记该交点
				}
			}
		}
	   
	   

十、试题 J 冒泡排序

2020蓝桥杯C++B组省赛第二场个人感受和个人题解_第7张图片

【样例输入】

4
1

【样例输出】

bbaa
1

【评测用例规模与约定】

漏掉了没保存上
大概是:
对于30% 的评测用例,1 ≤ n ≤ 20;
对于50% 的评测用例,1 ≤ n ≤ 100;
对于100% 的评测用例,1 ≤ n ≤ 10000;

【思路】

待更新
搜索暴力破解可以拿到30% —— 7.5分qwq;
垃圾破电脑换机器浪费我2-30分钟,结果提交时间12:58就截止,老师之前允诺的延时也只是真的安慰。。
这波学校破电脑背大锅。心态都蹦了,被电脑ex到考完都没啥心情吃饭了。
这次真无语了

感想:

学校机房真的难受,希望今年能忽略那一点点小错误拿个高点的名次吧。真的。。

现在大二真的有点忙,趁着还记得写点博客记录下吧。。害。。

待更新。

你可能感兴趣的:(c++,c语言)