蓝桥杯2010第一届初赛题目
NOIP2010初赛tyvj试卷
NOIP2010初赛延伸练习LZW编码(P1311.pas/.in/.out)描述DescriptionLZW编码是一种自适应词典编码。
在编码的过程中,开始时只有一部基础构造元素的编码的词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用与后继信息的编码。
举例说明:考虑一个待编码的信息串:“xyx yy yy xyx”.初始词典只有3个条目,第一个为x,编码为1;第二个为Y,编码为2;第三个为空格,编码为0;(对于空格,编码在任何情况下都是0)于是串“XYX”的编码为1-2-1(其中-为编码分隔符),加上后面的一个空格就是1-2-1-3。
但由于有了一个空格,我们就知道前面的“XYX”是一个单词,而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到字典里,编码为4,然后按照新的词典对后继信息进行编码,依次类推。
于是,最后得到编码:1-2-1-0-2-2-0-4-0-3我们可以看到,信息被压缩了。
压缩好的信息传递到接受方,接受方也只要根据基础词典就可以完成对该序列的完全恢复。
解码过程是编码过程的逆操作。
输入格式Input Format第一行为n,表示下一行有n个字符第二行有n个字符,第i个字符的编号为i,空格的编号为0第三行为需要解码的编码输出格式Output Format输出仅一行,表示解码后的字符串样例输入Sample Input2xy1-2-0-3-1-0-1-2-3-0样例输出Sample Outputxy xyx xyxy时间限制Time Limitation各个测试点1s注释Hintn<=26解码长度<=255过河问题(P1312.pas/.in/.out)描述Description在一个月黑风高的夜晚,有一群人在河的右岸,想通过唯一的一根独木桥走到河的左岸.在伸手不见五指的黑夜里,过桥时必须借照灯光来照明,不幸的是,他们只有一盏灯.另外,独木桥上最多能承受两个人同时经过,否则将会坍塌.每个人单独过独木桥都需要一定的时间,不同的人要的时间可能不同.两个人一起过独木桥时,由于只有一盏灯,所以需要的时间是较慢的那个人单独过桥所花费的时间.现在输入N(2<=N<1000)和这N个人单独过桥需要的时间,请计算总共最少需要多少时间,他们才能全部到达河左岸.例如,有3个人甲乙丙,他们单独过桥的时间分别为1 2 4,则总共最少需要的时间为7.具体方法是:甲乙一起过桥到河的左岸,甲单独回到河的右岸将灯带回,然后甲,丙在一起过桥到河的左岸,总时间为2+1+4=7.输入格式Input Format第一行为N,表示有N个人下面一行有n个数,表示每个人的过河时间输出格式Output Format一个数,即全部人过河的最短时间样例输入Sample Input31 2 4样例输出Sample Output7时间限制Time Limitation各个测试点1sf[n]=min(2*a[1]+a[n]+a[n-1] ,a[1]+2*a[2]+a[n])+f[n-2]烽火传递(P1313.pas/.in/.out)描述Description烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上。
蓝桥杯试题标准答案(练习)
1、亲密数:假设有a、b两个数,若 a 的所有因子之和等于b,b 的所有因子之和等于a ,并且 a 不等于b ,则称 a 和 b 是一对亲密数。
如284 和 220 就是一对亲密数。
#include<stdio.h>int main(){int a,b,i,n;for(a=1;a<=10000;a++){for(b=0,i=1;i<=a/2;i++)if(a%i==0)1b+=i;for(n=0,i=1;i<=b/2;i++)if(b%i==0)n+=i;1if(n==a&&a!=b&&a<b)printf("%d-%d\n",a,b);}return 0;}2、世纪末的星期:曾有邪教称 1999 年 12 月 31 日是世界末日。
当然该谣言已经不攻自破。
还有人称今后的某个世纪末的12 月 31 日如果是星期一则会....有趣的是任何一个世纪末的年份的12 月 31 日都不可能是星期一!!于是“谣言制造商”又修改为星期日 ......1999 年的 12 月 31 日是星期五,请问,未来哪一个离我们最近的一个世纪末年即xx99 年的12 月 31 日正好是星期天,即星期日请回答该年份,只写这个4 位整数,不要写 12 月 31 等多余信息#include<stdio.h>2int main(){long days = 5; /*1999 年的最后一天为周5,把下一年加上 5天对 7 取余为 0 的,则是周日*/int i = 2000;for(;;) /*无循环终止条件,可以利用break 语句终止循环*/{if(i%4==0&&i%100!=0||i%400==0){days = days%7+366;else{days = days%7+365;3}if(days%7==0&&i%100==99) {printf("%d",i);break;}i++;}return 0;}3、马虎的算式:小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
历年蓝桥杯省赛B组真题试题1
(1)煤球数目有一堆煤球,堆成三角棱锥形。
具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),如果一共有100层,共有多少个煤球?题解:纯粹的数学题而已int a[101] ={0};for(int i = 1 ; i < 101 ; i ++)a[i] = a[i-1] + i;int ans = 0;for(int j = 1 ; j < 101 ; j ++)ans += a[j];printf("%d\n",ans);(2)生日蜡烛某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。
现在算起来,他一共吹熄了236根蜡烛。
请问,他从多少岁开始过生日party的?请填写他开始过生日party的年龄数。
题解:暴力枚举。
第一重循环枚举刚开始过生日时候的岁数。
第二重循环是枚举现在的岁数第三重循环就是将刚开始过生日的岁数和现在的岁数加起来。
int start,end;for(start = 1 ; start < 236 ; start ++)for( end = start ; end < 236 ; end ++ )int sum = 0;for(int i = start; i <= end; i ++)sum += i;if( sum == 236)printf("start : %d end : %d\n",start,end); (3)B DEFA + — + —— = 10C GHI(如果显示有问题,可以参见【图1.jpg】)这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?//29题解:DFS+回溯由于计算机中5/2会等于2,而且如果打算采用精度方面的处理的话,会很麻烦,而且很容易错。
蓝桥杯历届试题题目总结
蓝桥杯历届试题题⽬总结后天就是蓝桥杯省赛了,今天总结⼀下这段时间做的蓝桥杯历届试题,还是⼀个⼀个题⽬的来吧1,历届试题矩阵翻硬币 这个题⽬说真的,我不会,在⽹上看了某神⽜的题解答案为 ans=sqrt(n)*sqrt(m),具体怎么证明的我也不知道2,历届试题兰顿蚂蚁 这个题⽬怎么说呢,应该是送分题,直接模拟就可以了,这⾥就不说了。
3,历届试题分糖果 这个题⽬好像之前在哪⾥做过,也是⼀道模拟题,弄两个数组搞⼀下就可以了 下⾯是代码#include<bits/stdc++.h>using namespace std;#define maxn 100+10int a[2][maxn],n;bool ok(int cur){for (int i=2;i<=n;i++) if (a[cur][i]!=a[cur][i-1]) return0;return1;}int main(){while(scanf("%d",&n)!=EOF){int cur=0,ans=0;for (int i=1;i<=n;i++) scanf("%d",&a[cur][i]);while(!ok(cur)){for (int i=1;i<=n;i++) {if (a[cur][i]%2) {a[cur][i]++; ans++;}}for (int i=1;i<n;i++) a[1-cur][i]=a[cur][i+1]/2; a[1-cur][n]=a[cur][1]/2;for (int i=1;i<=n;i++) a[1-cur][i]+=(a[cur][i]/2);cur=1-cur;}printf("%d\n",ans);}return0;}View Code4,历届试题⼩朋友排队 这个题让我想起了去年武⼤校赛的⼀道题,我永远忘不了,求最⼩交换次数就是求逆序对数,⽽这个题要算出每个⼩朋友交换的次数,故我们从前⾯求⼀次,再从后⾯求⼀次就可以了,我这⾥⽤树状数组来求#include<bits/stdc++.h>using namespace std;#define maxn 1000000+10#define LL long longint a[maxn],n,b[maxn],num[maxn],c[maxn];LL sum[maxn];void init(){sum[0]=0;for (LL i=1;i<maxn;i++) sum[i]=sum[i-1]+i;}int lowbit(int x){return x&(-x);}void add(int x){while(x<maxn){a[x]++;x+=lowbit(x);}}int get_sum(int x){int ans=0;while(x>0){ans+=a[x];x-=lowbit(x);}return ans;}int main(){init();while(scanf("%d",&n)!=EOF){memset(a,0,sizeof(a));memset(num,0,sizeof(num));for (int i=1;i<=n;i++) scanf("%d",&b[i]),c[i]=b[i];sort(c+1,c+n+1);int m=unique(c+1,c+n+1)-c;for (int i=1;i<=n;i++) b[i]=lower_bound(c+1,c+m+1,b[i])-c;for (int i=1;i<=n;i++){num[i]+=get_sum(maxn-1)-get_sum(b[i]);add(b[i]);}memset(a,0,sizeof(a));for (int i=n;i>=1;i--){num[i]+=get_sum(b[i]-1);add(b[i]);}LL ans=0;//for (int i=1;i<=n;i++) printf("%d ",num[i]); printf("\n");for (int i=1;i<=n;i++) ans+=sum[num[i]];printf("%I64d\n",ans);}return0;}View Code5,历届试题波动数列 这个题⽬⼀看,就知道是枚举a出现的次数和b出现的次数,⽹上有⼈⽤BFS和DFS来做,想都不想,肯定超时可以设第⼀个数为x,则 S=n*x+sgm i*(a or -b),则知道a和b的数⽬为n*(n-1)/2,则可以枚举a的数⽬A,知道A后,就看组成A有多少种⽅法,⽽我们只能⽤1,2,。
蓝桥杯第一届初赛题目
for(i=3; i>=0; i–)
n_max = n_max * 10 + N[i];
return n_max-n_min;
}
第五题,假设有m+n个人,其中,
m个人手持面额为5角的硬币,
n个人手持面额为1元的硬币,
他们都要乘车买票,
现假设售票员手中无零钞,
票价为5角,
下面这个函数就可以算出这m+n个人所有可能的买票情况,
}
switch(type)
{
case 0:
sprintf(answer, “%s %c (%s %c (%s %c %s))”,
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 1:
注:最后一题的编程题对参赛者的要求相当高,以下代码在你提交自己的程序设计思路前是不可见的。
求二十四点:
// Calcu24.cpp : Defines the entry point for the console application.
//
#include “stdafx.h”
#include “conio.h”
sprintf(answer, “%s %c ((%s %c %s) %c %s)”,
p[0], GetOper(oper[0]), p[1], GetOper(oper[1]), p[2], GetOper(oper[2]), p[3]);
break;
case 2:
sprintf(answer, “(%s %c %s) %c (%s %c %s)”,
历届蓝桥杯试题及答案
历届蓝桥杯试题及答案蓝桥杯是中国最有影响力的计算机竞赛之一,每年都会吸引众多计算机科学爱好者的参与。
本文将回顾历届蓝桥杯的试题,并给出相应的答案。
通过了解历届试题,可以帮助读者更好地准备参加蓝桥杯竞赛。
(此处省略介绍部分)第一届蓝桥杯试题及答案:试题一:(试题内容)(解答步骤)试题二:(试题内容)(解答步骤)试题三:(试题内容)(解答步骤)......第二届蓝桥杯试题及答案:试题一:(试题内容)(解答步骤)试题二:(试题内容)(解答步骤)试题三:(试题内容)(解答步骤)......随着届数的增加,蓝桥杯的试题逐渐增加了难度和复杂程度。
参赛者需要有扎实的计算机基础知识和编程技能才能应对这些挑战。
以下是蓝桥杯历届试题的一些特点总结:1. 试题内容涵盖广泛:蓝桥杯试题从计算机基础知识到算法设计,从编程练习到系统设计,几乎涵盖了计算机科学的各个领域。
2. 试题形式多样:蓝桥杯试题不仅有传统的选择题和编程题,还有设计题、开放题等形式。
这样的设计旨在考察参赛者的创新能力和综合运用能力。
3. 解答步骤详细:对于编程题和算法设计题,蓝桥杯试题答案中往往会给出详细的解答步骤,包括思路分析、代码实现等。
这对于参赛者来说是很好的学习资料。
通过研究历届蓝桥杯试题和答案,我们可以总结出以下参加蓝桥杯竞赛的一些建议:1. 扎实的基础知识:参赛者应该有扎实的计算机基础知识,包括数据结构、算法、编程语言等方面。
只有基础知识扎实,才能更好地应对复杂的试题。
2. 练习编程技巧:编程技巧是参赛者必备的能力,需要不断进行练习和实践。
可以通过刷题、参加编程比赛等方式来提高编程技巧。
3. 团队合作能力:蓝桥杯竞赛有团队赛和个人赛两种形式,参赛者可以选择适合自己的方式。
无论是个人赛还是团队赛,团队合作能力都是必不可少的。
在团队中合理分工、有效沟通,可以提高比赛的效果。
4. 多方面准备:蓝桥杯试题范围广泛,参赛者应该在各个方面进行准备,包括理论知识、实践能力、应试技巧等。
蓝桥杯 试题 辽工大 C语言 详细
简单数学问题时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:800 测试通过:74描述对一个五位以内的正整数,要求:(1)判断它是一个几位数;(2)逆序输出其各位数字。
输入现有一组M个测试数据(M<100),然后有M个五位以内的的正整数输出每行依次输出该数的位数和逆序输出各位数字,各位数之间用逗号(注意是英文的逗号)隔开样例输入3564391234样例输出5,9,3,4,6,53,3,2,11,4提示题目来源【提交本题】【本题解答状况】【对本求转置矩阵问题时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:322 测试通过:40描述求一个三行三列矩阵的转置矩阵。
输入第一行一个整数n<20,表示有n组测试数据,下面是n组数据;每组测试数据是九个整型数(每个数都不大于10000),分别为矩阵的的每项;输出每组测试数据的转置矩阵,每两个数之间有一个空格隔开;请在每组输出之后加一个换行样例输入21 2 3 4 5 6 7 8 92 3 4 5 6 7 8 9 1样例输出1 4 72 5 83 6 92 5 83 6 94 7 1提示注意,每行最后一个元素没有空格,直接换行。
题目来源【提交本题】【本题解答状况】【对本题提问】【返回】Dinner时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:78 测试通过:18描述Little A is one member of ACM team. He had just won the gold in World Final. To celebrate, he decided to invite all to have o ne meal. As bowl, knife and other tableware is not enough in the kitchen, Little A goes to take backup tableware in warehouse. There are many boxes in warehouse, one box contains only one thing, and each box is marked by the name of things inside it. For example, if "basketball" is written on the box, which means the box contains only basketball. With these marks, Little A wants to find out the tableware easily. So, the problem for you is to help him, find out all the tableware from all boxes in the warehouse.输入There are many test cases. Each case contains one line, and one integer N at the first, N indicates that there are N boxes in the warehouse. Then N strings follow, each string is one name written on the box.输出For each test of the input, output all the name of tableware.样例输入3 basketball fork chopsticks2 bowl letter样例输出fork chopsticksbowl提示The tableware only contains: bowl, knife, fork and chopsticks.题目来源【提交本题】【本题解答状况】【对本题提问】【返回】You are my brother时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:109 测试通过:12描述Little A gets to know a new friend, Little B, recently. One day, they realize that they are family 500 years ago. Now, Little A wants to know whether Little B is his elder, younger or brother.输入There are multiple test cases.For each test case, the first line has a single integer, n (n<=1000). The next n lines have two integers a and b (1<=a,b<=2000) each, indicating b is the father of a. One person has exactly one father, of course. Little A is numbered 1 and Little B is numbered 2.Proceed to the end of file.输出For each test case, if Little B is Little A’s younger, print “Y ou are my younger”. Otherwise, if Little B is Little A’s elder, print “Y ou are my elder”. Otherwise, print “Y ou are my brother”. The output for each test case occupied exactly one line.样例输入51 32 43 54 65 661 32 43 54 65 76 7样例输出You are my elderYou are my brother提示题目来源【提交本题】【本题解答状况】【对本题提问】【返回】Time时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:88 测试通过:14描述Digital clock use 4 digits to express time, each digit is described by 3*3 characters (including”|”,”_”and” “).now given the current time, please tell us how can it be expressed by the digital clock.输入There are several test cases.Each case contains 4 integers in a line, separated by space.Proceed to the end of file.输出For each test case, output the time expressed by the digital clock such as Sample Output.样例输入1 2 5 62 3 4 2样例输出_ _ _| _||_ |_||_ _||_|_ _ __| _||_| _||_ _| ||_提示The digits showed by the digital clock are as follows:_ _ _ _ _ _ _ _| _| _||_||_ |_ ||_||_|| |||_ _| | _||_| ||_| _||_|题目来源辽宁2010省赛【提交本题】【本题解答状况】【对本题提问】【返回】Friends number时间限制1000MS (30000MS) 运行内存限制65536KByte总提交:26 测试通过:2描述Paula and Tai are couple. There are many stories between them. The day Paula left by airplane, Tai send one message to teleph one 2200284, then, everything is changing… (The story in “the snow queen”).After a long time, Tai tells Paula, the number 220 and 284 is a couple of friends number, as they are special, all divisors o f 220’s sum is 284, and all divisors of 284’s sum is 220. Can you find out there are how many couples of friends number less than 10,000. Then, how about 100,000, 200,000 and so on.The task for you is to find out there are how many couples of friends number in given closed interval [a,b]。
深入Noip2010初赛试题和全解
作者:钟野梓序今年Noip2010初赛刚结束,网上便铺天盖地地响起了“今年初赛好容易”“分数线一定很高,怎么办……”之类的声音。
确实,自2008年起,Noip初赛难度确有逐年下降的趋势,然而这并不是出题水平降低的缘故,相反,我认为这是中国计算机协会(下称CCF)对于N oip考核目的的审视和改变所导致的必然结果。
因此,我试图通过深入解析本届Noip初赛试囗题,来探寻这种变化下面深层的规律,从而令信息学竞赛选手能更好地备战往后数届的Noip初赛,让初赛不再成为一个问题。
由于条件所限,本文仅以Pascal语言的提高组试囗题作为对象进行分析,相对于普及组而言提高组试囗题一向具有较高的难度和较好的区分度,作为研究对象是个很好的选择;至于说语言的选择,仅是因为笔者个人选择原因。
一、概况本届题目在设置方面与往年相似,由选择题(普及组仅有单项选择题,提高组则有单项选择题与不定项选择题)、问题求解、阅读程序写结果及完善程序四大部分组成;但值得注意的是,今年提高组试囗题的分值设计与往年出现了较大的不同,除了选择题仍然是30分(15分单项+15分不定项),其余部分分值均发生了变化,其中问题求解由10分上升到15分,阅读程序由32分下降到28分,完善程序由28分下降到27分。
由于是第一年实行这种分值,目前暂时无法定言背后的含义,然而或许CCF在初赛更加重视选手的数学素质,而弱化了对于阅读程序能力的考察。
众所周知,阅读程序的能力并不能非常真实地反映选手的程序能力,并且纵观近几年的阅读程序题已没有了什么新意,这也可看做是一个“求新求变”的信号。
至于试囗题整体难度方面较上年有了明显下降,其中问题求解第一题可以看做是考察选手的语文水平,而阅读程序更是没有了以往的“死算”题(即给定若干常数,在程序中设置一系列运算过程,让选手进行阅读计算类型的题目),完善程序给定的源代码风格良好,第二题竟然还加上了注释,这不能不说就是一种降低难度的举动。
蓝桥杯试题(真题)训练
蓝桥杯试题(真题)训练1. 运算符难度:5颗星c语⾔的compare函数⽐较两字符串⼤⼩1//使⽤c语⾔的compare函数⽐较两字符串⼤⼩返回值为-1,0,12string s1 = "asd",s2 = "asd";3int t = pare(s2);//逐个⽐较字母,若t=-1,说明 s1<s2 ; 若t=1,说明 s1>s2 ; 若t=0,说明 s1=s2 ;4 cout<<t<<endl;思路:使⽤两个函数:toNumber(string s,int c)、toString(long long n,int c)对于toNumber(string s,int c)函数作⽤:将c进制的s2字符串转为10进制的数字对于toString(long long n,int c)函数作⽤:将10进制的n数字转为c进制的字符串对于该题,我们运算中的数字都转为10进制去运算,所以我们的数字平时都以10进制保存(输⼊s2之后,使⽤toNumber(s2,c)转为10进制)当我们需要输出答案时,再将运算结果⽤c进制输出(toString(res,c))代码:注明:易错点都已在源代码中标出。
#include<iostream>#include<cstdio>#include<algorithm>using namespace std;//将c进制的s字符串转换为10进制的数字long long toNumber(string s,int c){ //第四处:返回数据应为long long型int len = s.length();long long n = 0;for(int i = 0;i<len;i++){if(s[i] >= 'A') n = (s[i]-'A'+10) + n*c;else n = (s[i]-'0') + n*c;}return n;}//将10进制的数字n转换为c进制的字符串sstring toString(long long n,int c){string s;if(n == 0) return"0"; //第⼀处:忘记考虑n=0的情况while(n){long long t = n%c; //第⼆处:t的数据范围错误写成intif(t>=10) s.push_back(t-10+'A');else s.push_back(t+'0');n/=c;}reverse(s.begin(),s.end());return s;}int main(){//n表⽰操作数,c表⽰当前进制单位,isclear标记前⾯的数是否被清除//p表⽰操作符序号int n,c=10,isclear = 1,p=0;cin>>n;//s1表⽰操作,s2表⽰数字string s1,s2;long long res,num;while(n--){cin>>s1;if(!pare("NUM")){cin>>s2;if(isclear){//说明前⾯的数已经被清除res = toNumber(s2,c);//说明s2为c进制的数,将s2转为10进制的数字isclear = 0; //第六处:记得将isclear的值设为0}else{ //说明前⾯有数num = toNumber(s2,c);if(p==1) res+=num;else if(p==2) res-=num;else if(p==3) res*=num;else if(p==4) res/=num;else if(p==5) res%=num;p=0; //第7处:记得将p的值设为0}}else if(!pare("ADD")){p=1;}else if(!pare("SUB")){p=2;}else if(!pare("MUL")){p=3;}else if(!pare("DIV")){p=4;}else if(!pare("MOD")){p=5;}else if(!pare("CHANGE")){cin>>c;}else if(!pare("EQUAL")){ //平时计算都以10进制,输出将res化为c进制cout<<toString(res,c)<<endl; //第三处:输出没加换⾏}else if(!pare("CLEAR")){//表⽰将前⾯的数清除isclear = 1; //第五处:总容易误写成将isclear=1写成c=1,导致样例输出结果为40 }}return0;}2. 求“连通块数⽬”题tarjan算法或者并查集需复习并查集解法:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;//并查集算法 find and union函数#define maxn 1000010int pre[maxn];int m,n,k,cnt;void Init(){for(int i = 1;i<=m*n;i++){pre[i]=i;}cnt = m*n; //cnt表⽰刚开始的根节点数⽬}int myFind(int a){if(a == pre[a]) return a;else return pre[a]=myFind(pre[a]);}void myunion(int a,int b){int aroot = myFind(a);int broot = myFind(b);if(aroot != broot){pre[broot] = aroot;//易错点:需注意,不要写成pre[b]=a;cnt--;}}int main(){cin>>m>>n;Init();cin>>k;while(k--){int a,b;cin>>a>>b;myunion(a,b);}cout<<cnt<<endl;}3. 回溯搜索每次可以进⾏两种操作:新建考场或者某⼀个之前的考场需复习1 #include<iostream>2 #include<cstdio>3 #include<algorithm>4using namespace std;56#define maxn 1057int n,m,ans=99999;8int f[maxn][maxn]={0};9int a[maxn]={0};//a[i]存第i个⼈所在的考场1011bool Judge(int x,int room){ //判断第x个⼈是否能使⽤第room个考场12for(int i=1;i<=n;i++){13if((f[x][i]==1)&&(a[i]==room)){ //说明该考场存在与x有关系的⼈14return false;15 }16 }17return true;18}1920void solve(int x,int room_num){21if(room_num>=ans){ //剪枝注意:我这⾥如果少了=,评测机会判断超时...22return;23 }24if(x>n){ //说明安排考场任务结束25 ans=min(ans,room_num);26return;27 }28//判断是否可以使⽤之前的某个考场29for(int i=1;i<=room_num;i++){30if(Judge(x,i)==true){31 a[x]=i;32 solve(x+1,room_num);33 a[x]=0;34 }35 }36//前⾯那些考场⽆法使⽤,需新建考场37 a[x]=room_num+1;38 solve(x+1,room_num+1);39 a[x]=0;40}4142int main(){43int x,y;44 cin>>n>>m;45while(m--){46 cin>>x>>y;47 f[x][y]=f[y][x]=1;48 }4950 solve(1,0);51 cout<<ans<<endl;52 }4.⼩数第n位思维题:模拟除法需复习注意:我们需判断是否需要对代码进⾏优化,不优化是否会超数据范围,超时之类的...很明显,该题需进⾏优化,对数据逼近防⽌超时---------易错点:注意变量的数据类型,int与long long的区别#include <iostream>using namespace std;int main(){long long i,a,b,n;cin>>a>>b>>n;a=a%b;//若n过⼤,加⼀个while快速逼近⼩数点后第n位的位置while(n>10){a*=1e10;n-=10;a%=b;}for(i=1;i<=n+2;i++) //注意:i的数据类型{a*=10;if(i>=n){cout<<a/b;}a%=b;}return0;}⼆分查找⽅法:这个要记住背诵binary_search(a,a+N,t)==true//表明在数组a中存在t这个数字下标=lower_bound(a,a+N,t)-a;//得到>=t这个数的下标5.对局匹配需复习算法思想:动态规划求:最多可以存在多少名(任意两名⽤户积分差不等于K)我们对⽤户的积分进⾏整理(对k取余,余数相同的积分在同⼀分组):0,0+k,0+2k...1,1+k,1+2k...2,2+k,2+2k...只有在同⼀个分组的⽤户才可能积分差等于K所以我们先求出每⼀个分组的最多可存在⽤户⼈数最后总和分组得到答案对每⼀个分组进⾏状态转移⽅程:f[j]=max(f[j-1],f[j-2]+num[j]);f[j]:表⽰ [该分组] 到第i个元素的最⼤⽤户⼈数对于积分i我们选或者不选完全取决于它的⽤户个数,⽽如果选积分i,那么积分i-k与积分i+k是不可选的,⽽如果不选积分i,那么积分i-k与积分i+k是可选的,所以:num[i]=max(num[i-k],num[i]+num[i+k])1 #include<iostream>2 #include<algorithm>3using namespace std;4#define maxn 1000015int n,k,ans;6//hsh[i]表⽰积分为i的⽤户⼈数7//下⾯两个数组每在⼀个分组中就重新赋值; 同⼀分组的余数t相同:t,k+t,2*k+t,3*k+t...8//num[i]存该分组的第i个元素的⽤户⼈数9//f[i]存该分组到第i个元素的最⼤⽤户⼈数 , 最⼤⽤户⼈数的关系:a,a+k,a+2*k , max(num[a]+num[a+2*k],num[a+k])10int hsh[maxn]={0},num[maxn]={0},f[maxn]={0};11int main(){12 cin>>n>>k;13 ans=0;14int t,i,j;15for(i=0;i<n;i++){16 cin>>t;17 hsh[t]++;18 }19if(k==0){//重复积分只取⼀个20for(i=1;i<maxn;i++){21if(hsh[i]!=0){22 ans++;23 }24 }25 }26else{27for(i=0;i<k;i++){//k个分组28int m=1;29for(j=i;j<maxn;j+=k){ //j为该分组的积分值,范围在(i,maxn)30 num[m++]=hsh[j];//hsh[j]为积分值为j时的⽤户⼈数31 }32 f[1]=num[1];33for(j=2;j<=m;j++){ //注意:这⾥的j⼀定要从2开始,否则下⾯的j-2会下标越界34 f[j]=max(f[j-1],f[j-2]+num[j]);35 }36 ans+=f[m];37 }38 }39 cout<<ans<<endl;40return0;41 }2.递推写法#include<iostream>#include<algorithm>using namespace std;#define maxn 100001int has[maxn]={0},d[maxn]={0};int main(){int n,k;cin>>n>>k;for(int i=0;i<n;i++){int x;cin>>x;has[x]++;}int ans=0;if(k==0){for(int i = 1; i < maxn; i++)ans += (bool)has[i];}else{for(int i=0;i<k;i++){//k个分组int sum=0;d[i]=has[i],d[i+k]=has[i+k];for(int j=i+2*k;j<maxn;j+=k){d[j]=max(d[j-k],d[j-2*k]+has[j]);//递推关系式sum=max(d[j],sum);}ans+=sum;}}cout<<ans<<endl;return0;}View Code6.发现环并查集+dfs思路:并查集找到环上的某点之后,进⾏递归求该环上的所有点代码:#include <cstdio>#include<iostream>#include <algorithm>#include<vector>using namespace std;const int maxn = 100001;int n;int f[maxn],flag,vis[maxn]={0};vector<int> g[maxn],ans;int Find(int x){return f[x]==x?x:f[x]=Find(f[x]);}bool dfs(int x){if(vis[x]){if(x==flag){ //说明递归结束return true;}else{ //说明回溯到前⾯经过的某节点return false;}}vis[x]=1;for(int i=0;i<g[x].size();i++){if(dfs(g[x][i])){ans.push_back(g[x][i]);return true;}}return false;}int main(){cin>>n;int x,y;//并查集⼀定要记得初始化for(int i=0;i<n;i++) f[i]=i;for(int i=0;i<n;i++){cin>>x>>y;g[x].push_back(y);g[y].push_back(x);int rootx=Find(x), rooty=Find(y);//并查集找到环的某点if(rootx!=rooty){f[rootx]=rooty;}else{//两个祖宗节点相同,说明是环节点flag=x;dfs(x);//找到环上的点后进⾏递归}}sort(ans.begin(),ans.end());for(int i=0;i<ans.size();i++)cout<<ans[i]<<"";return0;}7. 简单题#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define maxn 1001int main(){char a[maxn],b[maxn];scanf("%s%s",&a,&b);int len=strlen(a),cnt=0;for(int i=0;i<len;i++){if(a[i]==b[i]) continue;else{ //遍历过去,发现两个字符不相等的话,操作加⼀,把后⾯字符b[i+1]反转即可 cnt++;if(b[i+1]=='o') b[i+1]='*';else b[i+1]='o';}}cout<<cnt<<endl;return0;}7.错误票据简单题读题+简单哈希#include<iostream>using namespace std;#define maxn 100001int has[maxn]={0};int main(){int n,x;cin>>n;int A=maxn,B=0;for(int i=0;i<n;i++){while(cin>>x){has[x]++;if(x<A) A=x;if(x>B) B=x;char ch = getchar();if(ch=='\n') break;}}int d,c;//从题意可知,只有⼀个断数和重复数,总的数⽬为B-A+1个数字for(int i=A;i<=B;i++){if(has[i]==2) c=i;//hash值为2.说明这个数有重复if(has[i]==0) d=i;//hash值为0.说明这个数没有输⼊过}cout<<d<<""<<c<<endl;return0;}-------------------continue--------------------。
蓝桥杯题库的历届真题
1.历届试题矩阵翻硬币时间限制:1.0s 内存限制:256.0MB问题描述小明先把硬币摆成了一个n 行m 列的矩阵。
随后,小明对每一个硬币分别进行一次Q 操作。
对第x行第y列的硬币进行Q 操作的定义:将所有第i*x 行,第j*y 列的硬币进行翻转。
其中i和j为任意使操作可行的正整数,行号和列号都是从1开始。
当小明对所有硬币都进行了一次Q 操作后,他发现了一个奇迹——所有硬币均为正面朝上。
小明想知道最开始有多少枚硬币是反面朝上的。
于是,他向他的好朋友小M寻求帮助。
聪明的小M告诉小明,只需要对所有硬币再进行一次Q操作,即可恢复到最开始的状态。
然而小明很懒,不愿意照做。
于是小明希望你给出他更好的方法。
帮他计算出答案。
输入格式输入数据包含一行,两个正整数n m,含义见题目描述。
输出格式输出一个正整数,表示最开始有多少枚硬币是反面朝上的。
样例输入2 3样例输出1数据规模和约定对于10%的数据,n、m <= 10^3;对于20%的数据,n、m <= 10^7;对于40%的数据,n、m <= 10^15;对于10%的数据,n、m <= 10^1000(10的1000次方)。
2.历届试题兰顿蚂蚁时间限制:1.0s 内存限制:256.0MB问题描述兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。
平面上的正方形格子被填上黑色或白色。
在其中一格正方形内有一只“蚂蚁”。
蚂蚁的头部朝向为:上下左右其中一方。
蚂蚁的移动规则十分简单:若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
规则虽然简单,蚂蚁的行为却十分复杂。
刚刚开始时留下的路线都会有接近对称,像是会重复,但不论起始状态如何,蚂蚁经过漫长的混乱活动后,会开辟出一条规则的“高速公路”。
蚂蚁的路线是很难事先预测的。
你的任务是根据初始状态,用计算机模拟兰顿蚂蚁在第n步行走后所处的位置。
蓝桥杯所有题目
1.A+B问题问题描述输入A、B,输出A+B。
说明:在“问题描述”这部分,会给出试题的意思,以及所要求的目标。
输入格式输入的第一行包括两个整数,由空格分隔,分别表示A、B。
输出格式输出一行,包括一个整数,表示A+B的值。
样例输入12 45样例输出57数据规模与约定-10000 <= A, B <= 10000。
2.序列求和问题描述求1+2+3+...+n的值。
输入格式输入包括一个整数n。
输出格式输出一行,包括一个整数,表示1+2+3+...+n的值。
样例输入4样例输出10样例输入100样例输出5050数据规模与约定1 <= n <= 1,000,000,0003.圆的面积问题描述给定圆的半径r,求圆的面积。
输入格式输入包含一个整数r,表示圆的半径。
输出格式输出一行,包含一个实数,四舍五入保留小数点后7位,表示圆的面积。
样例输入4样例输出50.2654825数据规模与约定1 <= r <= 10000。
提示本题对精度要求较高,请注意π的值应该取较精确的值。
你可以使用常量来表示π,比如PI=3.14159265358979323,也可以使用数学公式来求π,比如PI=atan(1.0)*4。
4.Fibonacci数列问题描述Fibonacci数列的递推公式为:F n=F n-1+F n-2,其中F1=F2=1。
当n比较大时,F n也非常大,现在我们想知道,F n除以10007的余数是多少。
输入格式输入包含一个整数n。
输出格式输出一行,包含一个整数,表示F n除以10007的余数。
说明:在本题中,答案是要求F n除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出F n的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
样例输入10样例输出55样例输入22样例输出7704数据规模与约定1 <= n <= 1,000,000。
蓝桥杯部分题目(含答案)
1、未名湖边的烦恼关键词:递归,蓝桥杯,算法问题描述每年冬天,北大未名湖上都是滑冰的好地方。
北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩。
每天早上,租鞋窗口都会排起长龙,假设有还鞋的m个,有需要租鞋的n个。
现在的问题是,这些人有多少种排法,可以避免出现体育组没有冰鞋可租的尴尬场面。
(两个同样需求的人(比如都是租鞋或都是还鞋)交换位置是同一种排法)输入格式两个整数,表示m和n输出格式一个整数,表示队伍的排法的方案数。
样例输入3 2样例输出5数据规模和约定m,n∈[0,18]#include "iostream"#include "cstdio"#include "cmath"#include "algorithm"#include "map"using namespace std;int f(int m,int n){if(m<n) return 0;if(n==0) return 1;return f(m,n-1)+f(m-1,n);}int main(){int m,n;scanf("%d%d",&m,&n);int ans=f(m,n);printf("%d\n",ans);return 0;}2.标题:蚂蚁感冒关键词:结构体排序,蓝桥杯【题目描述】长100厘米的细长直杆子上有n只蚂蚁。
它们的头有的朝左,有的朝右。
每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。
当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。
这些蚂蚁中,有1只蚂蚁感冒了。
并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。
请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。
【数据格式】第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。
2010-2013蓝桥杯预赛真题及详细答案
第三届蓝桥桥杯预赛真题及详细答案一、微生物增殖假设有两种微生物X和Y, X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
现在已知有新出生的X=10, Y=89,求60分钟后Y的数目。
如果X=10,Y=90呢?本题的要求就是写出这两种初始条件下,60分钟后Y的数目。
把答案写在“解答.txt”中,不要写在这里!答案:0 和94371840(此题比较简单就不写程序了,以下均有程序)二、古堡算式福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:ABCDE * ? = EDCBA他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”华生:“我猜也是!”于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!参考答案:21978参考程序:#include<stdio.h>void main(){int k,t1 ,t;for(k=10234;k<50000;k++){bool flag[10]={0};t=k;t1=0;while(t){if(flag[t%10])break ;flag[t%10] = true ;t1 = t1*10 + t%10 ;t /= 10 ;}if( t==0 && t1%k==0){printf("%d * %d = %d\n",k,t1/k,t1);}}}三、比酒量有一群海盗(不多于20人),在船上比拼酒量。
过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。
再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。
当第4瓶酒平分喝下后,大家都倒下了。
蓝桥杯基础试题及答案
蓝桥杯基础试题及答案1. 题目:给定一个整数数组,请找出数组中第二大的数。
答案:首先对数组进行排序,然后取出倒数第二个元素即可。
2. 题目:编写一个函数,实现字符串的反转。
答案:可以使用栈的数据结构,将字符串中的字符依次压入栈中,再依次弹出即可得到反转后的字符串。
3. 题目:判断一个整数是否是回文数。
答案:将整数转换为字符串,然后比较字符串与其反转后的字符串是否相等。
4. 题目:给定一个链表,删除链表的倒数第n个节点。
答案:使用双指针法,一个指针先走n步,然后两个指针一起走,直到第一个指针到达链表末尾,此时第二个指针指向的就是需要删除的节点的前一个节点。
5. 题目:实现一个函数,计算两个整数相加的和。
答案:使用位运算,模拟加法运算的过程,考虑进位的情况。
6. 题目:给定一个二维矩阵,找出矩阵中从左上角到右下角的最短路径,路径上的数字之和最小。
答案:使用动态规划,从左上角开始,每次向下或向右移动,选择路径和最小的方向。
7. 题目:实现一个函数,判断一个整数是否是素数。
答案:从2到该整数的平方根进行遍历,如果该整数能被遍历中的任何一个数整除,则不是素数。
8. 题目:给定一个字符串,找出其中不重复的最长子串的长度。
答案:使用滑动窗口的方法,维护一个窗口,窗口内的字符串都是不重复的,每次向右扩展窗口,并更新最长不重复子串的长度。
9. 题目:给定一个排序数组,找出数组中没有出现的最小正整数。
答案:从1开始遍历,如果当前数字不在数组中,则返回当前数字;如果遍历完数组还没有找到,则返回数组最后一个数字加1。
10. 题目:实现一个函数,计算一个整数的阶乘。
答案:使用递归或循环,从1乘到该整数,注意处理大数的情况。
第1-7届蓝桥杯决赛试题及答案
第1-7届蓝桥杯决赛试题及答案2011年第1届蓝桥杯决赛试题及答案1.四方定理数论中有著名的四方定理:所有自然数至多只要用四个数的平方和就可以表示。
我们可以通过计算机验证其在有限范围的正确性。
对于大数,简单的循环嵌套是不适宜的。
下面的代码给出了一种分解方案。
请仔细阅读,填写空缺的代码(下划线部分)。
注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
直接写在题面中不能得分。
int f(int n, int a[], int idx){if(______________) return 1; // 填空1if(idx==4) return 0;for(int i=(int)sqrt(n); i>=1; i--){a[idx] = i;if(_______________________)return 1; // 填空2}return 0;}int main(int argc, char* argv[]){for(;;){int number;printf("输入整数(1~10亿):");scanf("%d",&number);int a[] = {0,0,0,0};int r = f(number, a, 0);printf("%d: %d %d %d %d\n", r, a[0], a[1], a[2], a[3]);}return 0;}2.加密在对文本进行简单加密的时候,可以选择用一个n位的二进制数,对原文进行异或运算。
解密的方法就是再执行一次同样的操作。
加密过程中n位二进制数会循环使用。
并且其长度也可能不是8的整数倍。
下面的代码演示了如何实现该功能。
请仔细阅读,填写空缺的代码(下划线部分)。
注意:请把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
蓝桥杯初赛b组试题
蓝桥杯初赛b组试题————————————————————————————————作者:————————————————————————————————日期:第一题结果填空3‘奖券数目有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利。
虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求。
某抽奖活动的奖券号码是5位数(10-99),要求其中不要出现带“4”的号码,主办单位请你计算一下,如果任何两张奖券不重号,最多可发出奖券多少张。
请提交该数字(一个整数),不要写任何多余的内容或说明性文字。
-题解:考试的时候写了个回溯法,然后屁颠屁颠的开始做下面一题了。
结果错了→_→1 #include <iostream>2using namespace std;3bool fuck(int t)4 {5while(t)6 {7if(t%10==4)return false;8 t/=10;9 }10return true;11 }12int main()13 {14int ans = 0, t = 10;15while(t<100)16if(fuck(t++))ans++;17 cout<<ans<<endl;18return0;19 }第一题正确答案:52488(我居然上来第一题就错了居然写了13440→_→)//cout<<8*9*9*9*9; →_→第二题结果填空5‘星系炸弹在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。
每个炸弹都可以设定多少天之后爆炸。
比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。
有一个贝塔炸弹,2014年11月9日放置,定时为1天,请你计算它爆炸的准确日期。
请填写该日期,格式为yyyy-mm-dd 即4位年份2位月份2位日期。
比如:2015-02-19 请严格按照格式书写。
蓝桥杯预赛题目与答案
蓝桥杯预赛题目1第一题标题:啤酒和饮料啤酒每罐2.3元,饮料每罐1.9元。
小明买了若干啤酒和饮料,一共花了82.3元。
我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。
注意:答案是一个整数。
请通过浏览器提交答案。
不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。
#include <stdio.h>void main() { int pj,yl; //啤酒与饮料double sum=82.3; for(pj=0; pj<=20; pj++) { yl=(int)((sum-pj*2.3)/1.9); if(pj*2.3+yl*1.9==sum) { printf("pj=%d,yl=%d\n",pj,yl); //pj=11 yl=30 } } }第二题标题:切面条一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢?答案是个整数,请通过浏览器提交答案。
不要填写任何多余的内容。
#include <stdio.h> void main(){ int qie(int n); int g(int n); int sum=0; //面条总数int n=10; sum=qie(n); printf("%d\n",sum); }int qie(int n) //折叠n次以后,切一刀后的面条数{ int g(int n); if(n==1) { return 3; } else { return g(n-1)+ qie(n-1); //g(n)是有所有面条都有折痕一边的面条数} }int g(int n) { if(n==1) { return 2; } else { return g(n-1)*2; } }-----1025第三题标题:李白打酒话说大诗人李白,一生好饮。
蓝桥杯c语言初赛试题及答案
蓝桥杯c语言初赛试题及答案蓝桥杯C语言初赛试题及答案1. 题目一:字符串反转编写一个函数,实现字符串的反转。
要求使用指针操作,不使用库函数。
```c#include <stdio.h>#include <string.h>void reverseString(char* str) {int len = strlen(str);char *start = str;char *end = str + len - 1;while (start < end) {char temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {char str[] = "Hello World";reverseString(str);printf("Reversed string: %s\n", str);return 0;}```答案:函数`reverseString`通过交换字符串的首尾字符来实现反转,直到首尾指针相遇。
2. 题目二:计算阶乘编写一个函数,计算并返回一个整数的阶乘。
要求使用递归。
```c#include <stdio.h>long factorial(int n) {if (n == 0) return 1;else return n * factorial(n - 1);}int main() {int num = 5;printf("Factorial of %d is %ld\n", num, factorial(num)); return 0;}```答案:函数`factorial`通过递归调用自身计算阶乘,当n为0时返回1,否则返回n乘以(n-1)的阶乘。
3. 题目三:寻找最大值编写一个函数,找出数组中的最大值。
蓝桥杯试题和答案
/*很久以前,T王国空前繁荣。
为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。
为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。
同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。
J是T国重要大臣,他巡查于各大城市之间,体察民情。
所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。
他有一个钱袋,用于存放往来城市间的路费。
聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关,在走第x千米到第x+1千米这一千米中(x是整数),他花费的路费是x+10这么多。
也就是说走1千米花费11,走2千米要花费23。
J大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?输入格式:输入的第一行包含一个整数n,表示包括首都在内的T王国的城市数城市从1开始依次编号,1号城市为首都。
接下来n-1行,描述T国的高速路(T国的高速路一定是n-1条)每行三个整数Pi, Qi, Di,表示城市Pi和城市Qi之间有一条高速路,长度为Di 千米。
输出格式:输出一个整数,表示大臣J最多花费的路费是多少。
样例输入:51 2 21 3 12 4 52 5 4样例输出:135样例说明:大臣J从城市4到城市5要花费135的路费。
*/#include<stdio.h>#include<string.h>int a[1000][1010];int main(){int i,j,k,n,x,y,z,max,sum;scanf("%d",&n);for(i=0;i<=n;i++)for(j=0;j<=n;j++)a[i][j]=999999;for(i=1;i<n;i++){scanf("%d%d%d",&x,&y,&z);a[x][y]=z;a[y][x]=z;}max=sum=0;for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i!=j){a[i][j]=a[i][k]+a[k][j]<a[i][j]?a[i][k]+a[k][j]:a[i][j];}for(i=0;i<=n;i++)for(j=0;j<=n;j++)if(a[i][j]<999999)max=a[i][j]>max?a[i][j]:max;for(i=1;i<=max;i++)sum+=(i+10);printf("%d\n",sum);return0;}。
蓝桥杯试题及答案
蓝桥杯试题及答案蓝桥杯是面向全国高校计算机专业学生的程序设计竞赛,由工业和信息化部人才交流中心主办,旨在提高学生的编程能力、算法设计能力以及团队合作能力。
以下是一份蓝桥杯试题及答案的示例,供参考。
### 蓝桥杯程序设计竞赛试题及答案#### 题目一:求最大公约数题目描述:给定两个正整数 a 和 b,请编写一个程序计算它们的最大公约数(GCD)。
输入格式:输入包含两个整数 a 和 b,用空格分隔。
输出格式:输出 a 和 b 的最大公约数。
样例输入:```24 36```样例输出:``````答案:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}int main() {int a, b;scanf("%d %d", &a, &b);printf("%d\n", gcd(a, b));return 0;}```#### 题目二:字符串反转题目描述:编写一个程序,实现对输入的字符串进行反转。
输入格式:输入一个字符串。
输出格式:输出反转后的字符串。
样例输入:```Hello World```样例输出:`````ldrow olleH```答案:```c#include <stdio.h>#include <string.h>int main() {char str[1000];scanf("%s", str);int len = strlen(str);for (int i = len - 1; i >= 0; i--) { printf("%c", str[i]);}return 0;}```#### 题目三:二分查找题目描述:在一个已排序的数组中,使用二分查找算法找出一个特定元素的位置。