
备战蓝桥杯
柯基吹泡泡
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
等差数列(第十届蓝桥杯省赛C++B组)
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中 N 个整数。现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?输入格式输入的第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1∼AN 并不一定是按等差数列中的顺序给出)输出格式输出一个整数表示答案。数据范围2≤N≤100000,0≤Ai≤109思路:利用等差数列公式,以及每两个数差值的公共最大公约数 代入即可#include<原创 2020-08-29 11:39:30 · 377 阅读 · 0 评论 -
括号配对《信息学奥赛一本通》(区间DP)
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1010;char st[N];int dp[N][N];int main(){ scanf("%s",st); int n=strlen(st); memset(dp,1000000,sizeof dp); .原创 2020-08-27 21:05:14 · 287 阅读 · 0 评论 -
包子凑数(第八届蓝桥杯省赛C++A/B组)
他发现这家包子铺有 N 种蒸笼,其中第 i 种蒸笼恰好能放 Ai 个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买 X 个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有 X 个包子。比如一共有 3 种蒸笼,分别能放 3、4 和 5 个包子。当顾客想买 11 个包子时,大叔就会选 2 笼 3 个的再加 1 笼 5 个的(也可能选出 1 笼 3 个的再加 2 笼 4 个的)。当然有时包子大叔无论如何也凑不出顾客想买的数量。比如一共有 3 种蒸笼,分别能放 4、5原创 2020-08-27 17:58:07 · 232 阅读 · 0 评论 -
生命之树(第六届蓝桥杯省赛C++B组)
在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集 S,使得对于 S 中的任意两个点 a,b,都存在一个点列 {a,v1,v2,…,vk,b} 使得这个点列中的每个点都是 S 里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得 S 中的点所对应的整数的和尽量大。这个最大的和就是上帝给生命之树的评分。经过 atm 的努力,他已经知道了上帝给每棵树上每个节点上的整数。但是由于 atm原创 2020-08-27 13:39:16 · 655 阅读 · 3 评论 -
密码脱落(第七届蓝桥杯省赛C++A组)
X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。输入格式共一行,包含一个由大写字母ABCD构成的字符串,表示现在看到的密码串。输出格式输出一个整数,表示至少脱落了多少个种子。数据范围输入字符串长度不超过原创 2020-08-25 14:58:24 · 221 阅读 · 0 评论 -
糖果《信息学奥赛一本通》
#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;int st[110];int dp[110][110];int main(){ int m,n; cin>>m>>n; for(int i=1;i<=m;i++) cin>>st[i.原创 2020-08-25 12:30:32 · 251 阅读 · 0 评论 -
鸣人的影分身《信息学奥赛一本通》
#include<iostream>#include<cstring>#include<cstdio>using namespace std;int dp[15][25];int main(){ int t; cin>>t; while(t--) { int m,n; cin>>m>>n; memset(dp,0,sizeof dp); ..原创 2020-08-23 13:04:09 · 214 阅读 · 0 评论 -
蓝桥杯-历届试题-乘积最大
给定 N 个整数 A1,A2,…AN。请你从中选出 K 个数,使其乘积最大。请你求出最大的乘积,由于乘积可能超出整型范围,你只需输出乘积除以 1000000009 的余数。注意,如果 X<0, 我们定义 X 除以 1000000009 的余数是负(−X)除以 1000000009 的余数,即:0−((0−x)%1000000009)输入格式第一行包含两个整数 N 和 K。以下 N 行每行一个整数 Ai。输出格式输出一个整数,表示答案。数据范围1≤K≤N≤105,−105≤Ai≤1原创 2020-08-18 16:44:56 · 627 阅读 · 0 评论 -
糖果传递《算法竞赛进阶指南》
有n个小朋友坐成一圈,每人有a[i]个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。求使所有人获得均等糖果的最小代价。输入格式第一行输入一个正整数n,表示小朋友的个数。接下来n行,每行一个整数a[i],表示第i个小朋友初始得到的糖果的颗数。输出格式输出一个整数,表示最小代价。数据范围1≤n≤1000000数据保证一定有解。我们根据输入输出样例数据,进行推导代码就比较简单了,推导过程比较难#include<iostream>#include<原创 2020-08-16 13:59:28 · 226 阅读 · 0 评论 -
蓝桥杯-历届试题-大臣的旅费(树形DP原理证明)
很久以前,T王国空前繁荣为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中,他所原创 2020-08-15 10:18:19 · 234 阅读 · 0 评论 -
全球变暖(第九届蓝桥杯省赛C++A/B组 Flood Fill算法)
你有一张某海域 N×N 像素的照片,”.”表示海洋、”#”表示陆地,如下所示:其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就有 2 座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。例如上图中的海域未来会变成如下样子:请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。输入格式第一行包含一个整数N。以下 N 行 N 列,包含一个由字符”原创 2020-08-14 15:11:37 · 245 阅读 · 0 评论 -
地牢大师《信息学奥赛一本通》(深度优先搜索三维字符数组)
你现在被困在一个三维地牢中,需要找到最快脱离的出路!地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过。向北,向南,向东,向西,向上或向下移动一个单元距离均需要一分钟。你不能沿对角线移动,迷宫边界都是坚硬的岩石,你不能走出边界范围。请问,你有可能逃脱吗?如果可以,需要多长时间?输入格式输入包含多组测试数据。每组数据第一行包含三个整数 L,R,C 分别表示地牢层数,以及每一层地牢的行数和列数。接下来是 L 个 R 行 C 列的字符矩阵,用来表示每一层地牢的原创 2020-08-13 21:06:49 · 253 阅读 · 0 评论 -
完全二叉树的权值(第十届蓝桥杯省赛C++A/B组)
给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1,A2,⋅⋅⋅AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1。输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅AN。输出格式输出一个整数代表答案。数据范围1≤N≤105,−105≤Ai≤105#include<iostream&g原创 2020-08-13 12:57:06 · 261 阅读 · 0 评论 -
交换瓶子(第七届蓝桥杯省赛C++B组 图论 环 置换群)
有 N 个瓶子,编号 1∼N,放在架子上。比如有 5 个瓶子:2 1 3 5 4要求每次拿起 2 个瓶子,交换它们的位置。经过若干次后,使得瓶子的序号为:1 2 3 4 5对于这么简单的情况,显然,至少需要交换 2 次就可以复位。如果瓶子更多呢?你可以通过编程来解决。输入格式第一行包含一个整数 N,表示瓶子数量。第二行包含 N 个整数,表示瓶子目前的排列状况。输出格式输出一个正整数,表示至少交换多少次,才能完成排序。数据范围1≤N≤10000思路:此题利用到了环的相关概念,下原创 2020-08-13 10:51:38 · 398 阅读 · 0 评论 -
红与黑《信息学奥赛一本通》(广度优先搜索)
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。输入格式输入包括多个数据集合。每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。在接下来的 H 行中,每行包括 W 个字符。每个字符表示一块瓷砖的颜色,规则如下1)‘.’:黑色的瓷砖;2)‘#’:白色的瓷砖;3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合原创 2020-08-12 16:57:13 · 221 阅读 · 0 评论 -
日志统计(第九届蓝桥杯省赛C++B组)
小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。其中每一行的格式是:ts id表示在 ts 时刻编号 id 的帖子收到一个”赞”。现在小明想统计有哪些帖子曾经是”热帖”。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是”热帖”。具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是”热帖”。给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。输入格式原创 2020-08-11 14:12:31 · 230 阅读 · 0 评论 -
外卖店优先级(第十届蓝桥杯省赛C++A组 暴力做法)
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int N=1e5+10;struct SUM{ int times,num; bool operator <(const SUM &t)const { if(times!=t.times)retur..原创 2020-08-10 14:42:17 · 480 阅读 · 1 评论 -
航班时间(第九届蓝桥杯省赛C++A组)
小 h 前往美国参加了蓝桥杯国际赛。小 h 的女朋友发现小 h 上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。小 h 对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有 12 小时时差,故飞机总共需要 14 小时的飞行时间。不久后小 h 的女朋友去中东交换小 h 并不知道中东与北京的时差。但是小 h 得到了女朋友来回航班的起降时间。小 h 想知道女朋友的航班飞行时间是多少。对于一个可能跨时区的航班,给定来回程的起原创 2020-08-10 12:38:09 · 603 阅读 · 0 评论 -
日期问题(第八届蓝桥杯省赛C++B组)
思路:一种是从19600101 依次1枚举到 20590101,相对简单一些,另一种是直接对输入数据处理,并且需要注意很多边缘细节,例如02/02/02 特殊数据#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a,b,c;string k;int leap_year[13]={0,31,29,31,30,.原创 2020-08-07 15:03:03 · 319 阅读 · 0 评论 -
移动距离(第六届蓝桥杯省赛C++B组)
#include<iostream>#include<cmath>using namespace std;int main(){ int w,m,n,y1,y2; cin>>w>>m>>n; int x1=m/w+1; int x2=n/w+1; if(m%w==0) { x1=m/w; } if(n%w==0) { x2=n.原创 2020-08-05 17:36:39 · 373 阅读 · 0 评论 -
回文日期(NOIP2016普及组)
思路:枚举所有八位数,分别判断是否为 合法日期 回文#include<iostream>using namespace std;int month_run[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};int month_frun[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};bool check_data(int x){ int data=x%10000; int day=data.原创 2020-08-05 13:26:16 · 346 阅读 · 0 评论 -
错误票据(第四届蓝桥杯省赛C++A/B组)
错误票据这道题,本身题意非常简单,但值得我们学习的是这道题的输入方式,针对这道题的输入方式我记录了两种方法输入数据仅仅已知行数,每行数据个数却是不固定的。方法一:利用 getchar() 检测换行符号 方法比较简单#include <iostream>#include<cstdio>#include<cstring>#include <string>#include<algorithm>using namespace std;i原创 2020-08-05 12:42:09 · 327 阅读 · 0 评论 -
特别数的和(第十届蓝桥杯省赛C++B组)
#include<iostream>using namespace std;bool check(int x){ while(x!=0) { int t=x%10; x=x/10; if(t==2||t==0||t==1||t==9) { return true; } } return false;}int main(){ int n; .原创 2020-08-04 14:03:08 · 279 阅读 · 0 评论 -
递增三元组(第九届蓝桥杯省赛C++B组)
思路:对A B C 先进行sort排序,循环B 利用二分思想 分别找出A中 B中 满足题意的个数即可,这里补充一下c++封装好的二分函数 C++ lower_bound 与 upper_bound 函数#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;const int N=1e5+10;int st1[N],st2.原创 2020-08-04 11:11:42 · 524 阅读 · 0 评论 -
连号区间(第四届蓝桥杯省赛C++B组)
思路:根据题目n的范围,我们需要将时间复杂度控制在 nlogn 以内,利用枚举可解决 [L,R]中 最大最小两数的差若==序列长度-1 即可满足题意#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N=1e4+10;int st[N];int main(){ int n; cin>>n; for(int i=原创 2020-08-02 12:07:19 · 167 阅读 · 0 评论 -
地宫取宝(第五届蓝桥杯省赛C++A/B组 动态规划 线性规划)
做地宫取宝这道题可以先看一看我的博客 摘花生 这道题,题目是在这基础上增加了难度中心思路:dp[i][j][k][v] i j 代表此时的位置 k 代表此位置 宝物的数量 v 代表当前口袋里 最大宝物的价值#include<iostream>#include<algorithm>using namespace std;int st[60][60];long long int dp[55][55][15][15];int n,m,k;int mod=10000000原创 2020-07-30 18:18:02 · 301 阅读 · 0 评论 -
摘花生(深度搜索 线性规划)
摘花生这道题我写了两种方法,一种超时的深度优先搜索,另一种是不超时的线性规划深度优先搜索(超时,当作练习)#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>using namespace std;int dp[110][110];bool book[110][110];int xs[2]={1,0},ys[2]={0,1};int n,m;int原创 2020-07-30 13:41:12 · 200 阅读 · 0 评论 -
激光炸弹(《算法竞赛进阶指南》, HNOI2003)
思路:这道题有点难度,利用二维矩阵的前缀和思想进行解题,并需要推导出其中炸弹最优的炸毁方式#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;const int N=5010;int maps[N][N];int n,R;int main(){ cin>>n>>R; in.原创 2020-07-25 13:45:16 · 159 阅读 · 0 评论 -
分巧克力(第八届蓝桥杯省赛C++A/B组)
思路:第一步是确定数据的存储以及如何对数据排序,第二步确定解题的方法为二分查找,第三步确定二分的左右边界,第四步编写给出确定的边长求出总的分得块数即可ac题目原创 2020-07-25 12:48:01 · 217 阅读 · 0 评论 -
四平方和(第七届蓝桥杯省赛C++A/B组)
思路:利用空间换取时间的思想,首先用结构体存储两个数以及这两个数的平方和,其次两层for循环并且利用二分的思想搜索结构体是否存在这样的数字t t=n-ii-jj#include<iostream>#include<cmath>#include<algorithm>using namespace std;const int N=5300000;int m;struct Sum{ int s,c,d; bool operator< (c.原创 2020-07-24 11:36:31 · 250 阅读 · 0 评论 -
机器人跳跃问题(今日头条2019,笔试题)
思路:我们从数据范围和题意可以分析出是一道二分查找的题目,那么确定 left 和 right 是这解决道题的关键,我们简单推到可得,不论当前 E 是否大于下一个建筑的 H,跳跃到下一个建筑的能量变化是相等的 例如当前在第 i 个建筑能量为 E 那么在第 i+1 个建筑的能量为 2*E-H(i+1)left:假设开始能量为E 一共有三个建筑 那么满足等式 [( 2E-H(0) ) - H(1)] -H(2) > 0right: 如果初始能量大于 建筑H 最大值 就一定能满足题意的跳跃到终点 rig.原创 2020-07-23 17:09:50 · 206 阅读 · 0 评论 -
子矩阵的合
思路:此题是前缀和的二位矩阵形式,下面套用两个公式,即可得解首先在输入二维矩阵时存储子矩阵,子矩阵的公式推导如下:上图为(x3,y3)的子矩阵(x3,y3)子矩阵=(x3,y2)子矩阵+(x2,y3)子矩阵-(x2,y2)子矩阵+(x3,y3);下面根据题意求出第二个公式想求(x2,y2)与(x3,y3)之间的子矩阵结果=(x3,y3)子矩阵合-(x3,y1)子矩阵合-(x1,y3)子矩阵合+(x1,y1);#include<iostream>using namespac原创 2020-07-23 15:35:43 · 192 阅读 · 0 评论 -
前缀和
前缀和思想是提前算出第 i 项之前总和原创 2020-07-23 09:14:59 · 119 阅读 · 0 评论 -
数的三次方根
第一个点是判断好条件,当 right-left 差小于六位小数时候满足题意,为提高精准度我们令right-left<=1e-8,第二个点是 left right 均等于 mid即可,想明白这两点此题ok.#include<iostream>#include<cmath>#include<cstring>#include<cstdio>using namespace std;int main(){ double n,k; .原创 2020-07-21 20:38:00 · 492 阅读 · 0 评论 -
数的范围
典型的二分查找,下面说一下避免死循环的小技巧:当推出 left+1 right 情况下中间值mid=(left+right)即可,当推出 left right+1 情况下 mid=(left+right)/2即可#include<iostream>#include<algorithm>using namespace std;int st[100010];int k;int main(){ cin>>k; int t; cin>.原创 2020-07-21 20:12:08 · 171 阅读 · 0 评论 -
飞行员兄弟(二进制暴力)
思路:纵观全局,把手的数量固定为16,因此利用暴力解决即可,二进制思想0代表不操作把手1代表操作把手,枚举所有状态即可,此外我们将二维数组可以映射成具体数字(映射数字/4代表横轴,映射数字%4代表列轴),具体可以参照代码注释#include<iostream>#include<cstring>#include<cstdio>using namespace std;char st[20][20];//存储把手初始态char lit[20][20];//把手备份.原创 2020-07-21 19:08:03 · 162 阅读 · 0 评论 -
翻硬币(第四届蓝桥杯省赛C++B组)
根据题意可以理解为翻动第i枚硬币会带动第i+1枚硬币的反转,因此欲达到目标即从左到右依次递推即可。#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;string be,af;int ans;int main(){ cin>>be; cin>>af; for(int .原创 2020-07-21 19:33:02 · 134 阅读 · 0 评论 -
第几个幸运数(第九届蓝桥杯省赛C++A组)
第几个幸运数到x星球旅行的游客都被发给一个整数,作为游客编号。x星的国王有个怪癖,他只喜欢数字3,5和7。国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。我们来看前10个幸运数字是:3 5 7 9 15 21 25 27 35 45因而第11个幸运数字是:49小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不...原创 2020-03-09 18:08:42 · 632 阅读 · 1 评论 -
剪格子(第四届蓝桥杯省赛C++A组)
剪格子(dfs)#include<iostream>using namespace std;const int N=12;int map[N][N];int book[N][N];int n,m;int INF=1e8;int cont;int dx[4]={0,-1,0,1},dy[4]={-1,0,1,0};int ans=INF;void dfs(int x...原创 2020-02-25 12:05:22 · 451 阅读 · 2 评论 -
日志统计(第九届蓝桥杯省赛C++B组)
日志统计(双指针)小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 NN 行。其中每一行的格式是:ts id表示在 tsts 时刻编号 idid 的帖子收到一个”赞”。现在小明想统计有哪些帖子曾经是”热帖”。如果一个帖子曾在任意一个长度为 DD 的时间段内收到不少于 KK 个赞,小明就认为这个帖子曾是”热帖”。具体来说,如果存在某个时刻 TT 满足该帖在 [T,T+D) [...原创 2020-02-22 12:50:54 · 606 阅读 · 0 评论