![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯
_Rikka_
- v -
展开
-
蓝桥杯国赛——质数拆分(01背包)
题目描述2019可以被分解成若干个两两不同的素数,请问不同的分解方案有多少种?注意:分解方案不考虑顺序,如 2 + 2017 = 2019 和 2017 + 2 = 2019 属于同一种方案。答案:55965365465060思路先用筛法求出质数数组,然后将本题转化成01背包来解,每个质数只可用一次,看其组合相加最终能产生多少个2019。Code:#include <iostream>#include<map>using namespace std;typedef原创 2021-06-03 19:47:32 · 792 阅读 · 3 评论 -
蓝桥杯国赛--游园安排
问题描述L 星球游乐园非常有趣,吸引着各个星球的游客前来游玩。小蓝是 L 星球游乐园的管理员,为了更好的管理游乐园,游乐园要求所有的游客提前预约,小蓝能看到系统上所有预约游客的名字。每个游客的名字由一个大写英文字母开始,后面跟 0 0 0 个或多个小写英文字母,游客可能重名。小蓝特别喜欢递增的事物。今天,他决定在所有预约的游客中,选择一部分游客在上午游玩,其他的游客都在下午游玩,在上午游玩的游客要求按照预约的顺序排列后,名字是单调递增的,即排在前面的名字严格小于排在后面的名字。一个名字 A A原创 2021-06-02 21:19:30 · 336 阅读 · 1 评论 -
蓝桥杯国赛---平方拆分(dfs)
问题描述将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 132 + 252 + 352 = 2019 与 132 + 352 +252 = 2019 视为同一种方法。思路暴力dfs,运用递增保证不重复。#include <iostream>using namespace std;typedef long long ll;ll num=0;void dfs(int n, int begin){ if (n &l原创 2021-05-31 23:38:00 · 663 阅读 · 0 评论 -
蓝桥杯国赛---质数行者(3维dp)
【问题描述】小蓝在玩一个叫质数行者的游戏。游戏在一个 n×m×w 的立体方格图上进行,从北到南依次标号为第 1 行到第 n 行,从西到东依次标号为第 1 列到第 m 列,从下到上依次标号为第 1 层到第 w 层。小蓝要控制自己的角色从第 1 行第 1 列第 1 层移动到第 n 行第 m 列第 w层。每一步,他可以向东走质数格、向南走质数格或者向上走质数格。每走到一个位置,小蓝的角色要稍作停留。在游戏中有两个陷阱,分别为第 r 1 行第 c 1 列第 h 1 层和第 r 2 行第 c 2 列第h2原创 2021-05-31 22:27:12 · 1986 阅读 · 5 评论 -
第十一届蓝桥杯(国赛)——阶乘约数
问题描述定义阶乘 n! = 1 × 2 × 3 × ··· × n。请问 100! (100 的阶乘)有多少个约数。答案提交这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。思路质因数分解,每个数可以分成有限个质数相乘,X = p1^α1 ∗ p2^α2 …… ∗ pk^αk。那么求X=1!*2! *…*100!,的约数先将X分解成质数相乘,而它的每一个约数的构成则为-----从每个质数次方选一种可能最低为0次方,最原创 2021-05-31 17:58:15 · 298 阅读 · 0 评论 -
蓝桥杯十一届国赛--扩散(枚举、暴力)
一般首先想到的解法应该是bfs,但其实不必这么麻烦。想一下扩散一步其实就是移动距离1,那么扩散10步最远能到的就是离扩散点相距10的点,想通了这里就可以直接暴力了。枚举可能扩散到的点的坐标(图方便x,y取了-10000–10000,绝对够了),看离4个最初扩散点的距离是否小于2020。Code#include <iostream>using namespace std;int main(){ int sum=0; for(int i=-10000;i<=1000原创 2021-05-30 18:08:39 · 439 阅读 · 1 评论 -
蓝桥国赛--本质上升序列(dp)
【问题描述】小蓝特别喜欢单调递增的事物。在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。例如,在字符串 lanqiao 中,如果取出字符 n 和 q,则 nq 组成一个单调递增子序列。类似的单调递增子序列还有 lnq、i、ano 等等。小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到 ao,取最后两个字符也可以取到 ao。小蓝认为他们并没有本质不同。对于一个字符串,小蓝想知道原创 2021-05-25 13:19:05 · 193 阅读 · 1 评论 -
蓝桥国赛--玩具蛇(回溯)
思路数据并不大,直接暴力dfs回溯就行,用一个标记数组b来表示哪个格子没被走,这个蛇得90°转向和向前就是说不能走已经走过的地方,细节见代码。Code#include<iostream>using namespace std;typedef long long ll;const int Max = 1e6 + 5;int b[100][100];int dp[100][100];int sec[8][2] = { {1,0},{-1,0},{0,1},{0,-1} };.原创 2021-05-25 12:58:53 · 192 阅读 · 0 评论 -
蓝桥杯 跑步锻炼
思路模拟即可Code#include <iostream>using namespace std;int main(){ int ans=0,sum=5; for(int i=2000;i<=2020;i++) { for(int j=1;j<=12;j++) { if(i==2020&&j>=11)break; for(int k=1;k.原创 2021-04-17 23:54:04 · 139 阅读 · 0 评论 -
蓝桥杯 分考场(图染色问题)
问题描述n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式一行一个整数,表示最少分几个考场。思路DFS暴力回溯+剪枝。大体思路是假设当前已经有n个考场,考场中已经放入了num原创 2021-04-17 23:04:03 · 252 阅读 · 0 评论 -
蓝桥杯 七段码 (并查集、DFS)
思路先上并查集的,直接暴力枚举每一种状态,然后直接遍历全图,发现如果有两个相连的段都是亮着的,则将其归于一个集合,最后数总共有几个集合,如果超过了两个那必然会有不连续的情况。Code#include<iostream>using namespace std;const int Max=1e3+5;int f[Max];void init(){ for(int i=1;i<=10;i++)f[i]=i;}int find(int x){ if(f[x]==.原创 2021-04-16 19:53:07 · 594 阅读 · 0 评论 -
蓝桥杯 子串分值(算贡献)
思路一开始看到数据范围,n=1e5,那么只可以遍历一次,那么如何在一次之内算出全部贡献?细心一些可以发现对于字母来说只有26个,这便是本题的突破口,我们只需在这一次遍历内算出每个字母的贡献即可。首先将子串分为n类—以第i号元素为结尾的子串(1<=i<=n)a对于以第i号元素为结尾类子串的贡献=0(第i号元素之前没出现过a)=a出现时的位置(在第i号元素之前a只出现过一次)=最近两次a出现过的位置之差(在第i号元素出现之前a出现两次以上)由上知道我们所需记录的信息就是在当前第i号元.原创 2021-04-15 19:50:21 · 367 阅读 · 0 评论 -
蓝桥杯 回文日期(模拟)
问题描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020年2月2日。因为如果将这个日期按 yyyymmdd 的格式写成一个8位数是,恰好是一个回文数。我们称这样的日期是回文日期。有人表示是“千年一遇”的特殊日子。对此小明很不认同,因为不到2年之后就是下一个回文日期:即2021年12月2日。也有人表示并不仅仅是一个回文日期,还是一个 型的回文日期。对此小明也不认同,因为大约 100 年后就能遇到下一个 型的回文日期:即2121年12月12日。算不上“千年一遇”,顶多算“千年两遇”原创 2021-04-15 17:40:08 · 203 阅读 · 0 评论 -
蓝桥杯 方格填数(DFS)
思路:暴力DFS,构建一个二维数组来存放填的数,然后直接枚举判断所有的相邻方向是否是连续的数。用sum记录步数,从左往右填,填到3,7时跳到下一行即可。Code:#include<iostream>#include<memory.h>using namespace std;typedef long long ll;const int Max = 1e6 + 5;int lst[6][6] ;int b[100];bool lin(int a, int b){.原创 2021-04-14 17:53:23 · 205 阅读 · 0 评论 -
蓝桥杯 油漆面积 (暴力、离散化)
其实一看数据范围,发现暴力记录是O(N^3)毫无疑问会超时,所以我想着用map采用差分离散化记录,这样更新每一行就是一个常数级次的,可以达到O(N ^2),1e8级次差不多在超时的边缘,因为用map离散存储,空间复杂度O(N)。但是!!!蓝桥杯又名为暴力杯,直接暴力无任何优化O(N^3)的算法竟然可以过。。。那就直接暴力八。#include<iostream>using namespace std;typedef long long ll;const int Max = 1e6 +.原创 2021-04-14 12:04:06 · 392 阅读 · 0 评论 -
蓝桥杯 分巧克力(二分)
思路:标准二分题,二分每一次选择的边长X。check(x):对于一块矩形巧克力能分出的边长x正方形数量为(矩形长/x)*(矩形宽/x),如果所有的巧克力能分出>=朋友人数,则此方案可行l=x,否则不可行r=x-1。Code:#include<iostream>#include<map>#include<algorithm>#include<cmath>#include<set>#include<string>#.原创 2021-04-14 09:15:33 · 192 阅读 · 0 评论 -
蓝桥杯 包子凑数(完全背包、裴蜀定理)
思路:根据裴蜀定理,当所有种类的蒸笼包子数的最大公约数不为1时,凑不出的包子数为无限多,因为无论蒸笼怎么组合都必须得是gcd得倍数,gcd不为1一定会有凑不出的。如果能够凑的出的有限,那么到达某个界限后都是凑得出的,这个界限为Ai*Ai=10000,或许会有人问为啥是这个数,这个具体证明我也搞不出,但可以模拟一下你取任意两个互质的数,如6,7,会发现42之后任意一个数都是可以通过6,7组合出来,姑且就当个结论记了八。然后就是对凑不出的数的一个求解,这个可以通过完全背包解决。dp[i] 表示凑出i个包子.原创 2021-04-13 23:59:59 · 1040 阅读 · 0 评论 -
蓝桥杯 正则匹配
思路:有两个问题需要解决,一个是每次遇到一个括号把括号里的运算当成一个整体处理,第二个是遇到 | 时将(前面的值与)和|中间的取最大。那么我们将每一个()封装用dfs处理,| 左右再进行比较即可。细节见代码。Code:#include<iostream>#include<map>#define pii pair<int,int>typedef long long ll;using namespace std;string str;int p = .原创 2021-04-13 20:28:26 · 101 阅读 · 0 评论 -
蓝桥杯第八届 迷宫
直接模拟一波,看到数据比较小就不用记忆化搜索了,每次搜索直接暴力,然后判断是否兜圈子,用一个sum记录步数,sum>200还没走完则为兜圈子。Code:#include<iostream>#include<map>#define pii pair<int,int>typedef long long ll;using namespace std;map<char, pii> ma;ll sum = 0, s = 0;char lst[1原创 2021-04-13 17:28:00 · 136 阅读 · 0 评论 -
蓝桥杯 第几个幸运数 (DFS)
思路:从一开始,直接暴力DFS,每次有三个选择*3 *5 *7,遇到小于结果的sum++,大于则返回。#include<iostream>#include<map>typedef long long ll;using namespace std;map<ll, int> ma;ll sum = 0, s = 0;void dfs(ll a){ if (a >= s)return; if (ma[a] >= 1)return; ma[.原创 2021-04-13 15:59:28 · 286 阅读 · 0 评论