奥林匹克运动是人类社会的一个罕见的杰作,它将体育运动的多种功能发挥得淋漓尽致,影响力远远超出了体育的范畴,在当代世界的政治、经济、哲学、文化、艺术和新闻媒介等诸多方面产生了一系列不容忽视的影响。奥林匹克运动有一句著名的格言:“更快、更高、更强(Citius, Altius, Fortius)”。迄今为止已经奥运会(夏季)已经举办了32届了,在以往的这些盛会中,出现了众多耀眼的体育明星,有人说喜欢菲尔普斯、有人说喜欢博尔特,也有人说喜欢苏炳添……
现在给每个运动员都编上号,然后大家给自己最喜欢的运动员投票,最后通过将得票最多的推选为最受欢迎的奥运之星。因为全球人数太多了,候选人也非常多,通过人力来统计非常麻烦,请你编写程序帮助将奥运之星统计出来,你能做到吗?
输入格式
第一行只有一个数:N(1≤N≤500000),表示参加投票的人数。
第二行有N个正整数,相邻数用空格隔开,所有数均不超过100000,表示这n个人的投票情况。
输出格式
得票最多的那个数,如果有相同得票的,则输出数值较小的那个数。
输入/输出例子1
输入:
3 1 2 2 17 1 3 17 3
输出:
3
输入/输出例子2
输入:
5
13 12 14 13 12
输出:
12
样例解释
样例1:共有9人参与投票,其中编号3得票最多。
#include<bits/stdc++.h>
using namespace std;
int n,a[100010],x,s,ma=-10000;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
a[x]++;
}
for(int i=1;i<=10000;i++)
if(a[i]>ma){
ma=a[i];
s=i;
}
cout<<s;
return 0;
}
XX大学里一共有N个学生,某一天有两个同学外出未归~为了排查到底是哪两个同学,校长让所有在校的同学都去报到,并且签下自己的学号。校长让你写一个程序,计算到底是哪两个同学外出未归呢?
输入格式
第1行为整数N(N<=100000)。以后N-2个整数(均用空格隔开)表示了剩下N-2个同学的学号。学号是从1..N连续编号的。
输出格式
一行,按学号从小到大顺序输出这两个同学的编号。两个数字之间用一个空格隔开。
输入/输出例子1
输入:
6
4 3 1 5
输出:
2 6
#include<bits/stdc++.h>
using namespace std;
int a[3150];
int main(){
int n,i,j;
int m;
int k;
int t=0;
int s;
scanf("%d",&n);
for(i=1;i<=n-2;i++){
scanf("%d",&m);
k=m/32;
a[k]=a[k]|(int)pow(2,m%32);
}
for(i=0;i<=3150;i++){
if(t==2)
break;
s=i*32;
for(j=0;j<=31;j++){
if(t==2)
break;
k=a[i]&1;
if(k==0&&s+j!=0)
{
t++;
printf("%d ",s+j);
}
a[i]=a[i]>>1;
}
}
return 0;
}
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤10000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。
输入格式
第1行为1个正整数,表示所生成的随机数的个数:N
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出格式
第1行为1个正整数M,表示不相同的随机数的个数。
第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
输入/输出例子1
输入:
10
20 40 32 67 40 20 89 300 400 15
输出:
8
15 20 32 40 67 89 300 400
#include<stdio.h>
void shuru(int [],int);
void paixu( int [],int);
void shuchu( int [] ,int);
int main(void){
int n;
int sz[100];
scanf("%d",&n);
shuru(sz,n);
paixu(sz,n);
shuchu(sz,n);
return 0;
}
void shuchu(int sz[],int n){
int i,j,cs=0;
for(i=0;i<=n;i++){
for(j=i+1;j<=n;j++){
if(sz[i]!=sz[j]) {
cs++;
i=j;
continue;
}
}
}
printf("%d\n",cs);
for(i=0;i<=n;i++){
for(j=i+1;j<=n;j++){
if(sz[i]!=sz[j]){
printf("%d ",sz[i]);
i=j;
continue;
}
}
}
}
void paixu(int sz[],int n){
int i,j ;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(sz[i]>sz[j]){
int tmp=sz[i];
sz[i]=sz[j];
sz[j]=tmp;
}
}
}
}
void shuru(int sz[],int n){
int i;
for(i=0;i<n;i++){
scanf("%d",&sz[i]);
}
}
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
输入格式
第一行有两个整数L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。
接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
对于20%的数据,区域之间没有重合的部分;
对于其它的数据,区域之间有重合的情况。
输出格式
只包含一个整数,表示马路上剩余的树的数目。
输入/输出例子1
输入:
500 3
150 300
100 200
470 471
输出:
298
#include<stdio.h>
int main() {
int L,M,i,j,n;
int a[10001],b[10001];
scanf("%d %d",&L,&M);
n=M*2;
for(i=0; i<n; i+=2){
scanf("%d %d",&b[i],&b[i+1]);
}
for(i=0;i<=L;i++){
a[i]=i;
}
int r,s;
for(i=0;i<n;i+=2){
r=b[i];
s=b[i+1];
for(j=r;j<=s;j++){
a[j]=(-1);
}
}
int k=0;
for(i=0;i<=L;i++) {
if(a[i]!=(-1)){
k++;
}
}
printf("%d", k);
return 0;
}
一年一度的信息学奥林匹克总结大会准备召开了,但大会负责人Mr.Huang却遇到了麻烦,参加会议的各中小学信息学教练都非常非常忙,因为他们不但要担任竞赛的辅导工作,而且还有常规的教学工作,有的还担任学校的行政职务,因此要召集他们都来开会是一件非常困难的事,为了让更多的人来参加会议,时间的选择非常关键。因此Mr.Huang让他们每个人交一份空闲时间表(单位:天,最大值为100),他们也只能在空闲的时间才能来开会。Mr.Huang请你通过他们提供的空闲时间表来确定开会的时间(会开1整天)。自然是能来的人越多越好,在这个前提下,请你确定某一天开会,如何能来的人数相同的话,会越早开越好,当然如何与会人数小于组委会设定的最少人数,会议将被取消。
输入格式
第一行为两个正整数N,Q(1≤Q≤N≤50),其中N表示信息学教练的总人数,Q表示至少需要多少信息学教练参加,使得会议能够召开。
接下来有N行,第i行表示第i个教练有空的时间。
输出格式
只有一个整数,为开会的最早时间,如果与会人数少于组委会设定的人数Q,会议被取消,则输出“0”。
输入/输出例子1
输入:
4 3
4 1 5 8 9
3 2 5 9
5 2 4 5 7 9
4 2 4 9 15
输出:
9
样例解释
4 1 5 8 9 {表示第一个人有4天有空,分别是第1天、第5天、第8天、第9天有空闲}
#include<bits/stdc++.h>
using namespace std;
struct str{
int cnt,num;
};
bool cmp(str x, str y){
return x.cnt>y.cnt;
}
str a[105];
int main(){
int n,q;
cin>>n>>q;
for(int i=1;i<=n;i++){
int m;
cin>>m;
for(int j=1;j<=m;j++){
int t;
cin>>t;
a[t].cnt++;
a[t].num=t;
}
}
sort(a+1,a+101,cmp);
if(a[1].cnt<q){
cout<<0;
}
else cout<<a[1].num;
return 0;
}
世界上每天都会有很多灾难,希望这次竞赛对你的自信心不是一个灾难。这次我们要处理的事情,是Fengzee就读的高中起火了,教室里困有大量的学生等待救援。学校里有n名受困学生,分布在m个不同教室里。火灾发生时,这n名聪明的学生每个人用自己手中的移动电话给校长发了一条短信,曰“我在某某教室”。于是,校长总共收到了n条短信息。每条短信息中,都说明了发信学生所在的教室的编号,用1-1000之间的整数表示。现在,这些信息放在你的输入文件中:第1行是一个整数n,表示学生的数目;第2行有n个整数,每个整数分别表示一个学生所在教室的编号,这些数据是无序的。
现在消防队到了,他们要你写出程序,帮助安排他们的救援顺序。假设每一个教室的危急情况都是一样的,时间也同样紧迫。救援的原则是这样的:第一,受困人数多的教室应当先被救援;第二,假如两个教室的受困学生数相同,你应当先救援编号较小的那个教室,我们称这条规则为“小编号优先原则”。你在输出文件中,应当写入一个方案,其中含有m个数字,相邻两数字间用符号“->”连接,数字的顺序表示救援顺序。
输入格式
输入文件中:第1行是一个整数n,表示学生的数目;第2行有n个整数,每个整数分别表示一个学生所在教室的编号,这些数据是无序的。
输出格式
输出文件中,应当写入一个方案,其中含有m个数字,相邻两数字间用符号“->”连接,数字的顺序表示救援顺序。
输入/输出例子1
输入:
8
2 7 92 1 1 2 2 92
输出:
2->1->92->7
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1005],k,s,ma,b[10005];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>m;
a[m]++;
}
for(int i=1;i<=1000;i++){
if(a[i]>0)s++;
}
for(int i=1;i<=s;i++){
ma=0;
for(int j=1;j<=1000;j++)
if(a[j]>ma){
ma=a[j];k=j;
}
cout<<k;
a[k]=0;
if(i!=s){
cout<<"->";
}
}
return 0;
}