目录

第一题:跑步训练(模拟)

第二题:纪念日(模拟)

第三题:合并检测(数学)

第四题 REPEAT 程序(模拟)

第五题:矩阵(dp)

第六题:整除序列(模拟)

第七题:解码(模拟+string)

第八题:走方格(DFS+dp)

第九题:整数拼接(数学+幂)


题目来源:2020年第十届C/C++ B组第一场蓝桥杯省赛真题_戎码一生的博客-CSDN博客_蓝桥杯c++真题


第一题:跑步训练(模拟)

 核心思路:

由于答案要求的是秒数,所以需要将上述的单位转换为秒,那么就可以得到平均每秒的能量损耗;因为有剩下的能量,不足以支撑1分钟的跑步的情况,所以需要对此情况进行特判

#include<iostream>using namespace std;int main()
{int n = 10000;int run = 600 / 60;//每秒的消耗 int time = 0;while (n){if (n - 600 < 0)//如果剩余的能量不支撑于1分钟run,则取整秒break{time = time * 60 + n / run;break;}n -= 600;n += 300;time += 2;}cout << time;return 0;
}

第二题:纪念日(模拟)

 核心思路:

因为要求的是天数,平年365天,闰年366天,枚举天数的同时,特判平年还是闰年即可

#include<iostream>using namespace std;int yearDay(int year)
{if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){return 366;}return 365;
}int main()
{int time = 0;for (int i = 1922; i <= 2020; i++){time += yearDay(i);}time -= 22;//23-22=1cout << time * 24 * 60 << endl;return 0;
}

第三题:合并检测(数学)

 核心思路:

假设总人数为100人,那么就有,对于k枚举 1~100 的范围内

(1)对于 总人数100%k==0 的情况:需要的总的试剂盒为:(100/i)+ i

········解释:(100/i):100个人中每次分为i个人 为 1组,那么总共就分为了 100/i组

········解释: +i是因为 它有1%的阳性率,(概率呈均匀分布)那么这100个人中就必定有人为阳性,那么就需要对,患阳性的那一组重新进行i个人的检测

(2)对于 总人数100%k!=0 的情况:需要的总的试剂盒为:(100/i)+ 1 + i

········解释:对于除不尽的情况需要进行+1 处理,即被分为了(100/i)+1组,剩下的的解释就与上面相同

#include<iostream>using namespace std;int main()
{int ans = 0;int sum = 0x3f3f3f;//初始化为一个很大的数,因为要求的是小于的情况for (int i = 1; i <= 100; i++)//枚举所有的检测数 {if (100 % i == 0){if (100 / i + i < sum){sum = 100 / i + i;ans = i;//题目要求的是被分为多少组是最小的,所以需要进行记录}}else{if (100 / i + 1 + i < sum){sum = 100 / i + 1 + i;ans = i;//记录当前最小的检测数}}}cout << ans << endl;
}

第四题 REPEAT 程序(模拟)

 核心思路:模拟

#include<iostream>using namespace std;int main()
{int ans = 0;for (int i = 0; i < 2; i++){ans += 4;for (int j = 0; j < 5; j++){for (int k = 0; k < 6; k++){ans += 5;}ans += 7;}ans += 8;}ans += 9;cout << ans << endl;return 0;
}

第五题:矩阵(dp)

思路来自:

第十一届蓝桥杯 ——矩阵_六级不考550+不改名-CSDN博客

#include <iostream>
using namespace std;int f[1020][1020];//含义:第一行中选i个数字,第二行中选择j个数字的方案数int main()
{f[0][0] = 1;                                   // 两行一个数字都不放,也是一种方案for (int i = 0; i <= 1010; i++)for (int j = 0; j <= i; j++){if (i - 1 >= j)                         // 转移前的状态也要合法,即第一行的数量不小于第二行的数量f[i][j] += f[i - 1][j] % 2020;if (j - 1 >= 0)f[i][j] += f[i][j - 1] % 2020;}cout << f[1010][1010] << endl;//全选的情况return 0;
}

第六题:整除序列(模拟)

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{long long n;scanf("%lld",&n);while(n){printf("%lld ",n);n>>=1;}return 0;
}

第七题:解码(模拟+string)

#include <iostream>
#include <cstring>
using namespace std;int main()
{string s;cin >> s;string ans;for (int i = 0; i < s.size(); i ++){if(s[i] >= '0' && s[i] <= '9')for (int j = 0; j < (s[i] - '0') - 1; j ++) ans += s[i - 1];else ans += s[i];}cout << ans << endl;return 0;
}

第八题:走方格(DFS+dp)

思路来自:

第十一届蓝桥杯——走方格_六级不考550+不改名-CSDN博客

#include <iostream>
using namespace std;const int N = 50;int f[N][N];int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i ++)for (int j = 1; j <= m; j ++){if(i % 2 == 0 && j % 2 == 0) continue;if(i == 1 && j == 1) f[i][j] = 1;              // 起点到起点只有一种方案 else if(i == 1) f[i][j] = 1;                   // 第一行只能从左边走过来 else if(j == 1) f[i][j] = 1;                   // 第一列只能从上面走下来 else f[i][j] = f[i][j - 1] + f[i - 1][j];      // 其余情况:既能从左边走过来,也可以从上面走下来 }cout << f[n][m] << endl;return 0;
}

第九题:整数拼接(数学+幂)

暴力:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 100010;
int n, k;
int a[N];bool check(int x,int y)
{int cnt = 0;int t = y;while (y)//123{cnt++;y /= 10;}x = x * pow(10, cnt) + t;if (x % k == 0) return true;else return false;
}int main()
{cin >> n >> k;for (int i = 0; i < n; i++) scanf("%d", &a[i]);int ans = 0;for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (check(a[i], a[j]) && i!=j) ans++;}}cout << ans << endl;return 0;
}

优化:

AcWing 2068. 整数拼接 - AcWing

#include <iostream>
#include <algorithm>
#include <cstring>using namespace std;typedef long long ll;
const int N = 100010;int n, mod;     // n 即题目中 n,mod 即上述 k
ll ans;         // ans 存答案,由于最多会有 n ^ 2 中情况,所以需要开 ll
int a[N];       // a 存输入数据
int cnt[11][N]; // cnt 即上述数组 cntint log_10(int x) // 返回 1 + log10(x)
{int res = 0;while (x) x /= 10, res ++ ;return res;
}void work()     // 从前往后跑一遍
{for (int i = 0; i < n; i ++ ){ans += cnt[log_10(a[i])][(mod - a[i] % mod) % mod]; // 累加 cntfor (int j = 0, power = 1; j < 11; j ++ ) // 将 a[i] 的 0 ~ 10 次方 % mod 的结果计入 cnt{cnt[j][power * 1ll * a[i] % mod] ++ ;power = power * 10 % mod;}}
}int main()
{scanf("%d%d", &n, &mod);for (int i = 0; i < n; i ++ )scanf("%d", a + i);work();memset(cnt, 0, sizeof cnt); // 别忘了在第二次跑之前清空一下 cnt 数组// 其实并不需要从前往后,从后往前写两遍。// 只需要将数组反转一下,再从前往后跑一遍即可reverse(a, a + n);work();printf("%lld\n", ans);return 0;
}作者:垫底抽风
链接:https://www.acwing.com/solution/content/15969/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

蓝桥杯2020年第十一届C/C++B组(第一次)省赛习题题解相关推荐

  1. 蓝桥杯2020年第十一届C/C++B组(第二次)省赛习题题解

    目录 试题A.门牌制作(拆分数字) 试题 B 既约分数(gcd) 试题C 蛇形填数(数学) 试题D 跑步锻炼(模拟) 试题E 七段码(图论+并查集) 试题F:成绩统计(格式化输出) 试题G:回文日期( ...

  2. [蓝桥杯]2020年第十一届省赛真题C/C++ B组(七月)

    第十一届蓝桥杯省赛题目 试题A: 跑步训练 试题B: 纪念日 试题C: 合并检测 试题D: REPEAT 程序 试题E: 矩阵 试题F: 整除序列 试题G: 解码 试题H: 走方格 试题I:整数拼接 ...

  3. 蓝桥杯2020年第十一届JavaB组真题题目+解析+代码+答案:7.八次求和

    不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 点击下面链接 蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA.B.C ...

  4. 蓝桥杯2020年第十一届国赛真题-皮亚诺曲线距离

    我找不到满分题解,结果我肝一个下午肝出来了,有一说一,在考场碰到这题估计要没,今年国赛加油把,方法过于暴力,仅供参考 #include<iostream> #include<algo ...

  5. 2020年第十一届C/C++ B组第二场蓝桥杯省赛真题

    2020年第十一届C/C++ B组第二场蓝桥杯省赛真题 真题 第一题:门牌制作 第二题:既约分数 第三题:蛇形填数 第四题:跑步锻炼 第五题:七段码 第六题:成绩统计 第七题:回文日期 第八题:子串分 ...

  6. 第十一届蓝桥杯 2020年国赛真题及解析 (Java 大学B组)

    第十一届蓝桥杯 2020年国赛真题 Java 大学B组 A 美丽的 2 B 扩散 C 阶乘约数 D 本质上升序列 E 玩具蛇 F 蓝肽子序列 ​G 皮亚诺曲线距离 H 画廊 I 补给 J 质数行者 所 ...

  7. 蓝桥杯2020山西省省赛太原理工大获丰收

    2020年10月18日,太原理工大学在明向校区软件学院实验室举行了蓝桥杯软件类A组的山西省省赛(分赛场比赛).太原理工学子共获得"C/C++程序设计大学A组"一等奖32枚(一等奖共 ...

  8. 洛谷P8706 [蓝桥杯 2020 省 AB1] 解码 C语言/C++

    [蓝桥杯 2020 省 AB1] 解码 题目描述 小明有一串很长的英文字母,可能包含大写和小写. 在这串字母中,有很多连续的是重复的.小明想了一个办法将这串字母表达得更短:将连续的几个相同字母写成字母 ...

  9. 洛谷P8707 [蓝桥杯 2020 省 AB1] 走方格 C语言/C++

    [蓝桥杯 2020 省 AB1] 走方格 题目描述 在平面上有一些二维的点阵. 这些点的编号就像二维数组的编号一样,从上到下依次为第 1 1 1 至第 n n n 行,从左到右依次为第 1 1 1 至 ...

最新文章

  1. python手机版打了代码运行不了-如何用iPad运行Python代码?
  2. 机器学习案例:scikit-learn实现ebay数据分析
  3. 5月18发布会,这次TDSQL又有什么大动作?
  4. (*长期更新)软考网络工程师学习笔记——Section 4 物理层的其它知识
  5. 他毕业两年,博客一年,时间
  6. 机器学习实践五---支持向量机(SVM)
  7. Android pda出入库管理,出入库PDA管理系统软件
  8. 华为P50 Pro渲染图再曝光:液态镜头、四曲面屏很吸睛
  9. CSS经典书写技巧之(二)
  10. Firefox必备插件
  11. flex 1037:包不能嵌套
  12. eclipse提示打不开java虚拟机
  13. No package ‘libmarco-private‘ found
  14. MySQL高级篇——事务
  15. 什么叫做正向代理和什么叫做反向代理
  16. 7.3 pgfplots点集
  17. input自动填充后背景颜色被覆盖的问题
  18. PHP生成PDF-TCPDF
  19. SAP ABAP 业务对象 BUS6041 AssetSubCostRev 后续资产成本和收入 BAPI 清单和相关 TCODE
  20. 苹果平板怎么卸载软件_苹果手机怎么装第三方软件

热门文章

  1. 许昌一高2021年高考成绩查询,2020年许昌高中高考成绩怎么样啊??
  2. sass 转换为 css
  3. 服装行业施行ERP体系的首要好处是什么?
  4. PowerBuilder 部署iis报错:IIS is not acessblee Please check the server address and port number.
  5. 硬盘读不出来如何恢复?好用的数据恢复软件分享
  6. flutter拨打电话url_launcher
  7. Excel 同一单元格显示不同颜色
  8. ajax获取jsp数据,如何使用ajax调用从servlet到jsp获取arraylist数据
  9. 数据库六种范式详解(1NF/2NF/3NF/BCNF/4NF/5NF)
  10. 用Python批处理将WORD文件转换成PDF格式(工具:win32com模块)