蓝桥杯

大一新生备战2020蓝桥杯

纵然是瞬间 提交于 2020-03-08 18:43:32
一:错误票据 关键字:排序 题目: 资源限制时间限制:1 .0s 内存限制:256.0MB问题描述 某涉密单位下发了某种票据,并要在年终全部收回。 每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。 你的任务是通过编程,找出断号的ID和重号的ID。 假设断号不可能发生在最大和最小号。 输入格式 要求程序首先输入一个整数N(N<100)表示后面数据行数。 接着读入N行数据。 每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),请注意行内和行末可能有多余的空格,你的程序需要能处理这些空格。 每个整数代表一个ID号。 输出格式 要求程序输出1行,含两个整数m n,用空格分隔。 其中,m表示断号ID,n表示重号ID 样例输入1 2 5 6 8 11 9 10 12 9 样例输出1 7 9 样例输入2 6 164 178 108 109 180 155 141 159 104 182 179 118 137 184 115 124 125 129 168 196 172 189 127 107 112 192 103 131 133 169 158 128 102 110 148 139 157 140 195 197 185 152

蓝桥杯练习9

六月ゝ 毕业季﹏ 提交于 2020-03-07 14:37:41
/** 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式   输入一行,包含一个正整数n。 输出格式   按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998 989989 998899 数据规模和约定   1<=n<=54。 / package lanqiaozhenti; import java.util. ; public class test9 { public static void main(String[] args) { Scanner in =new Scanner(System.in); int n=in.nextInt(); //long m=System.currentTimeMillis();计算程序运行的时间 for(int i=10000;i<=99999;i++) { int a=i/10000; int b=(i/1000)%10; int c=(i/100)%10; int d=(i/10)%10; int e=i%10; if(b==d&&a==e&&a+b+c+d+e==n) { System.out.println(i);

2014年第五届蓝桥杯C++B组I题

99封情书 提交于 2020-03-07 04:58:01
2014年第五届蓝桥杯C++B组I题 地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。 【数据格式】 输入一行 3 个整数,用空格分开:n m k ( 1 <= n , m <= 50 , 1 <= k <= 12 ) 接下来有 n 行数据,每行有 m 个整数 Ci ( 0 <= Ci <= 12 ) 代表这个格子上的宝物的价值 要求输出一个整数,表示正好取k个宝贝的行动方案数。该数字可能很大,输出它对 1000000007 取模的结果。 例如,输入: 2 2 2 1 2 2 1 程序应该输出: 2 再例如,输入: 2 3 2 1 2 3 2 1 5 程序应该输出: 14 这道题记忆化搜索。 原本想想简单的dfs的。。后来是50*50的数据让我望而生畏。。还是老实记忆化搜索把。。 只能向下或者向右。 然后记录最大值就行。如果当前格子的值比拿在手上的大。(严格大) 那么有两种选择

2014年第五届蓝桥杯C++B组H题

十年热恋 提交于 2020-03-07 04:38:36
2014年第五届蓝桥杯C++B组H题 蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。 【数据格式】 第一行输入一个整数n ( 1 < n < 50 ) , 表示蚂蚁的总数。 接着的一行是n个用空格分开的整数 Xi ( - 100 < Xi < 100 ) , Xi的绝对值,表示蚂蚁离开杆子左边端点的距离。正值表示头朝右,负值表示头朝左,数据中不会出现 0 值,也不会出现两只蚂蚁占用同一位置。其中,第一个数据代表的蚂蚁感冒了。 要求输出 1 个整数,表示最后感冒蚂蚁的数目。 例如,输入: 3 5 - 2 8 程序应输出: 1 再例如,输入: 5 - 10 8 - 20 12 25 程序应输出: 3 资源约定: 峰值内存消耗 < 256M CPU消耗 < 1000ms 这道题。。思维。。。如果思路按照题目要求可能有点迷糊。。 我们这样思考。 题目要求说两只蚂蚁相见都会反向相当于相见之后继续按原来的方向前行。 因为相见的时候都在同一坐标系嘛。然后都反向就相当于没有反向嘛。所以这样一思考就很好写了 假如感冒的蚂蚁向右走

蓝桥杯之激光样式

久未见 提交于 2020-03-07 03:17:34
标题:激光样式 x星球的盛大节日为增加气氛,用30台机光器一字排开,向太空中打出光柱。 安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开! 国王很想知道,在目前这种bug存在的情况下,一共能打出多少种激光效果? 显然,如果只有3台机器,一共可以成5种样式,即: 全都关上(sorry, 此时无声胜有声,这也算一种) 开一台,共3种 开两台,只1种 30台就不好算了,国王只好请你帮忙了。 要求提交一个整数,表示30台激光器能形成的样式种数。 注意,只提交一个整数,不要填写任何多余的内容。 思路:一个变形的全排列吧。对于这一个激光,如果前一个相邻的没有开的话,对它来说一共有两种选择。深搜就好了。 代码如下: # include <bits/stdc++.h> # define ll long long using namespace std ; int ans = 0 ; int vis [ 40 ] ; inline int check ( ) { int num = 0 ; for ( int i = 1 ; i <= 30 ; i ++ ) num + = vis [ i ] ; return num ; } inline void dfs ( int x , int num , int n ) { if ( x == 31 && check ( ) == n )

发现环 蓝桥杯

会有一股神秘感。 提交于 2020-03-05 23:21:04
发现环 蓝桥杯 题意 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。 为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗? 输入格式   第一行包含一个整数N。   以下N行每行两个整数a和b,表示a和b之间有一条数据链接相连。 解题思路 这个题可以用 dfs 进行搜索,这个思路应该是最容易想到的了。 但是也可以使用拓扑来处理,思路也很简洁,需要处理的是这个边不是有向边,那该怎么办呢?这里我们需要把边当成双向边来对待,就相当于有两条有向边,这样这里的 in[i]==1 (入度为1)就相当于是普通拓扑排序的入度为 0 ,也就是说这个点绝对不会在循环上,这样我们就可以把这个点所连接的点的入度减一,依次进行操作,直到没有入度为 1 的点了。 代码实现 #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<stack>

蓝桥杯——发现环(并查集+DFS)

妖精的绣舞 提交于 2020-03-05 21:01:27
题目: 输入输出: 分析: 根据题目可知只会多出一条边,那么只有可能出现一个环,每当输入两个点的时候使用并查集判断两个点是否有相同的祖先,如果没有,将两个点合并,如果两个点已经具有共同的祖先,说明此时这条边构成了环,那么此时可以将这两个点作为环的起点和终点,使用DFS搜索这一条路径,所经过的点即为环上的点。 代码: # include <iostream> # include <cstring> # include <cstdio> # include <vector> # include <algorithm> using namespace std ; const int MAXN = 100005 ; int root [ MAXN ] , rnk [ MAXN ] , num [ MAXN ] ; bool vis [ MAXN ] , found ; vector < int > vec [ MAXN ] ; int n , ind ; int Getr ( int x ) { if ( root [ x ] == x ) return x ; else return root [ x ] = Getr ( root [ x ] ) ; } void Union ( int x , int y ) { if ( rnk [ x ] > rnk [ y ] ) root [

【Java】蓝桥杯历届试题 题解

拟墨画扇 提交于 2020-03-05 18:25:26
历届试题 PREV-1 核桃的数量 历届试题 PREV-2 打印十字图 历届试题 PREV-1 核桃的数量 原题链接: http://lx.lanqiao.cn/problem.page?gpid=T24 问题描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 各组的核桃数量必须相同 各组内必须能平分核桃(当然是不能打碎的) 尽量提供满足1,2条件的最小数量(节约闹革命嘛) 输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30) 输出格式 输出一个正整数,表示每袋核桃的数量。 样例输入1 2 4 5 样例输出1 20 样例输入2 3 1 1 样例输出2 3 思路: 求三个数的最小公倍数。 Code: import java . util . Scanner ; public class Main { static int gcd ( int a , int b ) { return b == 0 ? a : gcd ( b , a % b ) ; } static int lcm ( int a , int b ) { return a * b / gcd ( a , b ) ; } public static void main ( String [

蓝桥杯-2014本科B-李白打酒

橙三吉。 提交于 2020-03-05 04:18:38
李白打酒 这道题跟去年还是前年的一个“奇怪的比赛”几乎一摸一样,详情:http://www.cnblogs.com/youdiankun/p/3594967.html 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案 的个数(包含题目给出的)。 注意:通过浏览器提交答案。答案是个整数。不要书写任何多余的内容。 1 #include<cstdio> 2 #include<string.h> 3 4 char a[20]; 5 int count; 6 7 int wine(char *a) 8 { 9 int i,s=2; 10 for(i=0;i<14;i++) 11 { 12 if(a[i]==1) 13 s*=2; 14 else 15 s-=1; 16 } 17 if(s==1)//当s=1时,是前14次。最后一次遇花,s-1=0,正好把酒喝光了 18 return 1; 19 else 20 return 0; 21 } 22

三羊献瑞|2015年蓝桥杯B组题解析第三题-fishers

岁酱吖の 提交于 2020-03-04 18:02:50
三羊献瑞 观察下面的加法算式: 祥 瑞 生 辉 三 羊 献 瑞 三 羊 生 瑞 气 (如果有对齐问题,可以参看【图1.jpg】) 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 答案:1085 思路一:暴力法,8层循环,从0~9中选8个数参与加法运算,筛选条件:满足abcd+efgb = efcbx 思路二:dfs求全排列,筛选条件满足:abcd+efgb = efcbx 代码一暴力枚举: #include<iostream> using namespace std; /*枚举法,暴力解法*/ int main(){ // abcd + efgb for(int a = 1;a<=9;a++){ for(int b = 0;b<=9;b++){ if(b == a){ continue; } for(int c = 0;c<=9;c++){ if(c==b || c==a){ continue; } for(int d = 0;d<=9;d++){ if(d==c || d==b || d==a){ continue; } for(int e = 1;e<=9;e++){ if(e==d || e==c ||e ==b || e==a){ continue; } for(int f=0;f<=9