前几天(2021.4.18)刚刚比完了2021年第十二届蓝桥杯省赛,本人参加的是软件组C++B组的比赛,本文包括了这一届C++B组的题目以及部分题解、感悟和总结。

目录

  • 试题A.空间
  • 试题B.卡片
  • 试题C.直线
  • 试题D.货物摆放
  • 试题E.路径
  • 试题F.时间显示
  • 试题G.砝码称重
  • 试题H.杨辉三角形
  • 试题I.双向排序
  • 试题J.括号序列
  • 总结

试题A.空间


考查计算机基础知识,一字节等于8位,1MB=220B
答案:67108864

256*2^20/4

试题B.卡片


一道模拟题,注意题目要求求出能够拼到多少,而不是求不够拼出多少,最后结果要减1
答案:3181

#include <iostream>using namespace std;
int cnt[15];int main()
{for(int i=0;i<=9;i++) cnt[i]=2021;int i;for(i=1;;i++){int t=i;while(t){if(cnt[t%10]==0){cout<<i-1;return 0;}cnt[t%10]--;t/=10;}}return 0;
}

试题C.直线


根据直线两点式推导转换成直线一般方程ax+by+c=0(见下图)这样就不用考虑斜率是否存在、避免除法的困扰了,通过除以公约数使a,b,c互质,放入set去重就行了,但是要重载操作符。

答案:40257

#include<iostream>
#include<cmath>
#include<set>
using namespace std;
struct node{//点int x,y;
}p[1000];
struct line{//直线int a,b,c;//直线一般方程的系数bool operator<(const line &p) const {if (a == p.a) return b == p.b ? c < p.c : b < p.b;return a < p.a;}bool operator==(const line &p) const {return a == p.a && b == p.b && c == p.c;}
};
int cnt;
set<line> se;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);
}
int gcdd(int a,int b,int c){return gcd(gcd(a,b),gcd(b,c));
}
int main()
{int n=20,m=21;for(int i=0;i<n;i++)for(int j=0;j<m;j++)p[++cnt]={i,j};for(int i=1;i<=cnt;i++){for(int j=i+1;j<=cnt;j++){int a=p[i].y-p[j].y;//系数int b=p[j].x-p[i].x;int c=p[i].y * (p[i].x-p[j].x)- p[i].x *(p[i].y-p[j].y);int t=gcdd(fabs(a),fabs(b),fabs(c));se.insert({a/t,b/t,c/t});}}cout<<se.size();return 0;
}

试题D.货物摆放


题目给的数很大,如果直接暴力两重循环会超时。转换思路,把n所有的约数求出来,发现 2021041820210418只有128个约数,然后对这128个约数暴力枚举两重循环,计算出结果。可惜这题比赛的时候思路歪了想错了。
答案:2430

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
LL yue[101000],cnt;int main()
{LL n=2021041820210418;for(LL i=1;i<=n/i;i++){if(n%i==0){yue[++cnt]=i;if(i*i!=n)yue[++cnt]=n/i;}}//sort(yue+1,yue+cnt+1);//for(int i=1;i<=cnt;i++)cout<<yue[i]<<" ";//cout<<cnt;int ans=0;for(int i=1;i<=cnt;i++){for(int j=1;j<=cnt;j++){if(n%(yue[i]*yue[j])==0)ans++;}}cout<<ans;return 0;
}

试题E.路径


最短路径模版题,dijkstra跑一遍就行了。比赛的时候太赶时间了做完就直接把答案交上去了最后还忘记检查,太懊悔了,比赛结束发现我交的答案竟然是0x3f3f3f3f,我TM直接心态崩了。大家做完一定要好好检查!!!
答案:10266837

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int N=2510;
int g[N][N],dist[N],st[N];
int n=2021;
int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
int lcm(int a,int b){return a*b/gcd(a,b);
}
int dijkstra(){memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=1;i<=n;i++){int t=-1;for(int j=1;j<=n;j++){if(!st[j] && (t==-1 || dist[j]<dist[t]))t=j;}st[t]=1;for(int j=1;j<=n;j++){dist[j]=min(dist[j],dist[t]+g[t][j]);}}return dist[n];
}
int main(){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(i!=j){if(fabs(i-j)<=21){g[i][j]=lcm(i,j);g[j][i]=lcm(i,j);}else{g[i][j]=0x3f3f3f3f;g[j][i]=0x3f3f3f3f;}}}cout<<dijkstra();//cout<<0x3f3f3f3f;return 0;
}

试题F.时间显示

【样例输入 1】
46800999
【样例输出 1】
13:00:00
【样例输入 2】
1618708103123
【样例输出 2】
01:08:23
【评测用例规模与约定】
对于所有评测用例,给定的时间为不超过 1018 的正整数。

这算是一道相对比较简单的题了,也是唯一完整做出来的了,除法取模搞定,注意要用longlong。

#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;int main()
{LL n;cin>>n;n/=1000;int h=n/3600%24;n=n%3600;int m=n/60%60;n=n%60;int s=n%60;printf("%02d:%02d:%02d",h,m,s);return 0;
}

试题G.砝码称重

【样例输入】
3
1 4 6
【样例输出】
10
【样例说明】
能称出的 10 种重量是:1、2、3、4、5、6、7、9、10、11。
1 = 1;
2 = 6 6 4 (天平一边放 6,另一边放 4);
3 = 4 1;
4 = 4;
5 = 6 1;
6 = 6;
7 = 1 + 6;
9 = 4 + 6 1;
10 = 4 + 6;
11 = 1 + 4 + 6。

【评测用例规模与约定】
对于 50% 的评测用例,1 ≤ N ≤ 15。
对于所有评测用例,1 ≤ N ≤ 100,N 个砝码总重不超过 100000。

嗯?不对劲哦,第二题就不会了,01背包?太菜了想不明白。


后补:闫氏dp分析法

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 110, M = 2e5 + 10;
int n,m;//m记录最大重量
int a[N];
bool dp[N][M];//dp[i][j]表示前i个砝码,称出j的集合,值为bool值,能称出j就true
//砝码称重
int main()
{cin>>n;for(int i=1;i<=n;i++) cin>>a[i],m+=a[i];dp[0][0]=true;for (int i = 1; i <= n;i++)//前i个for (int j = 0; j <=m;j++)//称出jdp[i][j]=dp[i-1][j]||dp[i-1][j+a[i]]||dp[i-1][abs(j-a[i])];//只要有一种情况为真,那么dp[i][j]就真int ans=0;for(int i=1;i<=m;i++)if(dp[n][i])ans++;cout<<ans;return 0;
}

试题H.杨辉三角形

【样例输入】
6
【样例输出】
13
【评测用例规模与约定】
对于 20% 的评测用例,1 ≤ N ≤ 10;
对于所有评测用例,1 ≤ N ≤ 1000000000。

这数据开的也太大了吧,109次方,没办法了暴力前十个骗分。

试题I.双向排序

【样例输入】
3 3
0 3
1 2
0 2
【样例输出】
3 1 2
【样例说明】
原数列为 (1, 2, 3)。 第 1 步后为 (3, 2, 1)。 第 2 步后为 (3, 1, 2)。 第 3 步后为 (3, 1, 2)。与第 2 步操作后相同,因为前两个数已经是降序了。

【评测用例规模与约定】
对于 30% 的评测用例,n, m ≤ 1000;
对于 60% 的评测用例,n, m ≤ 5000;
对于所有评测用例,1 ≤ n, m ≤ 100000,0 ≤ ai ≤ 1,1 ≤ bi ≤ n。

上来直接用sort,时间复杂度O(mnlogn),一半分应该能拿到

#include<iostream>
#include<algorithm>
using namespace std;
int a[101000];int main()
{int n,m;cin>>n>>m;for(int i=1;i<=n;i++)a[i]=i;while(m--){int p,q;cin>>p>>q;if(p==0){sort(a+1,a+q+1,greater<int>());}else{sort(a+q,a+n+1);}}for(int i=1;i<=n;i++) cout<<a[i]<<" ";return 0;
}

yxc讲解:双向排序

试题J.括号序列

【样例输入】
((()
【样例输出】
5
【评测用例规模与约定】
对于 40% 的评测用例,|s| ≤ 200。
对于所有评测用例,1 ≤ |s| ≤ 5000。

好像也是用dp,不会做
yxc讲解:括号序列

总结

这次比赛感觉比想象的难一点,编程第二题就涉及了DP,做过以往的题目不会像今年直接编程第二题就无从下手,DP也只会几个经典的模版题,属实想不到,括号那题好像也是DP,真没法做,而且这一块练的也少新的背景根本想不到,更别说列出转移方程。最可气的还是路径那题,标准最短路径模版题,竟然拿不到分!!还是怪自己太粗心、不检查。总得来说虽然这次蓝桥杯拿不到好成绩,有点小遗憾,但是总归在准备过程中还是学到了不少东西。

2021年第十二届蓝桥杯省赛C/C++B组题解总结相关推荐

  1. 2021年第十二届蓝桥杯省赛第二场Python组(真题+解析+代码):双阶乘

    1 真题 2 解析 难度系数:⭐ 考察题型:数论 涉及知识点: 双阶乘 思路分析: 啊这,竟然遇到了小学数学题:找规律.老铁,拿捏了! 规律:后一项都比前一项少个2,2021!!=2021*2019* ...

  2. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学A组 - D.路径 Ideas 算法:最短路径 数据结构:图 思路:根据规则构图,单源最短路径Dijkstra算法. 首先构图其实很简单,就是按照 ...

  3. 2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序

    2021年第十二届蓝桥杯 - 省赛 - C/C++大学B组 - I.双向排序 Ideas 题目中给出了两种操作: 当 pi = 0 时,表示将 a1, a2, · · · , aqi 降序排列: 当 ...

  4. 第十二届蓝桥杯省赛C/C++B组2021

    第十二届蓝桥杯省赛C/C++B组2021 A:空间(5分) 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 小蓝准备用 256MB256MB 的内存空间开一个数组,数组的每个 ...

  5. 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解

    文章目录 2021年第十二届蓝桥杯省赛B组(C/C++)第二场题解 1.求余 2.双阶乘 3.格点 4.整数分解 5.城邦 6.特殊年份 7.小平方 8.完全平方数 9.负载均衡 10.国际象棋 20 ...

  6. 第十二届蓝桥杯省赛 Java 大学 B 组—砝码称重—满分百分题解

    第十二届蓝桥杯省赛 Java 大学 B 组-砝码称重-满分百分题解 一.解题思路 1.解法一( Java ) 解法思路:简单模拟 ☝ArrayList 遍历 + HashSet 存储(去重) 伪代码如 ...

  7. 第十届蓝桥杯省赛C/C++B组题解与感想

    第一次参加蓝桥杯的感想和总结 1.本次比赛整体而言其实是发挥出了正常的水平的,考试的发挥也算正常(有点受考试环境的影响:1.考试题目以图片形式给出2.控制台复制粘贴受限,但是这都不是主要的原因,),但 ...

  8. 2021 第十二届 蓝桥杯 国赛决赛 Java B组 真题 详细解析

    文章目录 2021 第十二届 Java B组 国赛 真题答案 详细解析 试题A: 整数范围 答案:255 分析: Code: 试题B: 纯质数 答案:1903 分析: Code: 试题C: 完全日期 ...

  9. 2021年第十二届蓝桥杯省赛+国三C/C++B组参赛经历分享

    目录 一些流水账 备赛总结 语言选择 一些问题 牢骚 最近蓝桥杯报名又开始了,先预祝家人们能取得好成绩~ 一些流水账 按照惯例,先简单地自我介绍一下:本人就读于西南某不知名双非院校+计算机弱校(不是凡 ...

最新文章

  1. GAN(Generative Adversarial Network,GAN)模型之:InfoGAN、WGAN、DCGAN模型
  2. Linux命令 swap:内存交换空间
  3. MSDE2000的安装方法
  4. python处理json数据 乱码报错_python操作mysql中文显示乱码的解决方法
  5. 蓝桥杯评分标准_蓝桥杯软件个人赛校内选拔赛评分标准和选拔标准
  6. 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
  7. angularjs的三种注入方式
  8. Java自动装箱和拆箱
  9. tomcat之一:指定tomcat运行时JDK版本
  10. js获取某节点的特定父节点
  11. split和join和pop和remove用法
  12. Git 基础(九)—— Failed to push some refs to git
  13. MySQL优化步骤和my.cnf优化配置
  14. 微型计算机地基本结构,微型计算机地基本结构.ppt
  15. php更新记录没有获取值,php – 节点更新:获取旧值
  16. html5 h264 websocket,2.5 在WebSocket中使用HTML5媒体
  17. web项目导出excel表格
  18. 盲文压纹机和AAC设备
  19. b、B、kb、kB单位
  20. 零基础入门网络安全最直线距离的学习路线

热门文章

  1. 人教版数学课本插画暴露出的问题
  2. 不用聚合函数求最高工资
  3. 常见网站劫持案例及解析
  4. win10系统哪个是索引服务器,小编教你在Win10系统下建立索引的方法技巧
  5. 多亏了这个神器,让我斩获华为入场券
  6. 让企业订单交期满足率提升3.5倍,新一代APS(高级生产计划与排程系统)是什么样的?
  7. 54家半导体芯片原厂涨价、调价及交期变动通知函!
  8. 计算机一级wps选择题必背知识点,计算机一级WPS提高练习题及答案
  9. 拼多多活动期间怎么控制|百誉纳成
  10. 手把手教你使用Python抓取QQ音乐数据!