Problem A: 第一集 你好,世界冠军
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 265 Solved: 50
[Submit][Status][Web Board]
Description
“我宣布,第十届国际程序设计竞赛现在开始!本次比赛时间为9点到14点……”伴随着大赛主席的宣布,一场体现现今最高编程水平的大赛正式拉开帷幕。
距比赛现场有十几公里远的地方,有一个少年名叫小A的还在睡觉。这是一场让他盼望很久的比赛,只是昨晚太兴奋了。不过一切还不算太晚,这个比赛是5个小时,允许迟到的。
“几点了现在~”睡眼朦胧间看了下手机。“啊!都11点啦!……”只见他像弹簧一样从床上弹起来,穿下衣服拿起书包就出门去了。没错,你说对了,他没有刷牙洗脸,这也是他一向的作风,不拘小节~
“本次比赛的规则是有很多道题目,每个选手有个比赛号码,每道题目都只记录第一个做出题目的参赛者编号,最后按照参赛者编号的记录数排名……”组委会在说明比赛规则。
过了许久,小A急匆匆冲进大赛门口,“嘭~哎哟~”,小A撞到了一位女生。这名女生名叫小C,是校报的记者。“会不会走路啊!走路都不长眼!”小C生气地骂道,一边打量着这位邋里邋遢的男生心想“码农也就这幅德性,不跟他一般见识”,一边捡起她的单反。小A本来还是睡意朦胧,立马清醒了过来,连忙道歉,朝小C看去,只见一头飘逸的长发里藏着一张秀气的脸,虽然是在生气,但是看起来更可爱了。小A不由内心一动,不过更着急的还是比赛,刚要动身进入场地,就被小C喊住了,“站住!我的单反好像被你撞坏了!”。小A哪顾得上这个,就说“比赛完我拿奖金赔你就是~”。小C鄙视到“大言不惭,我等着看你被人虐!”
广告时间:喜太多提醒现在是有奖问答时间,请你编程找出本届冠军是谁哦!剧中比赛全球大学生都参加了编号从-10^9到10^9,不要问我比赛场地能不能坐下,这是全球同步比赛,结果汇总在一起的。总共题目数可达10万道。给你题目数N,和N个编号,每个编号是指这道题目第一个做出来的参赛者编号,求出出现次数最多的编号和次数,次数相同输出编号最小的。具体格式见样例。
比赛时间总是过得很快,“10、9、8、7……”随着裁判员的倒计时,比赛结束了。接下来是紧张的公布结果时间。
“好消息!本次比赛的世界冠军在我们赛区!”组委会宣布了一个另全场震惊的结果!大家议论纷纷,猜测这个人会是谁呢?小C那是既兴奋又生气,兴奋的是可以跟世界冠军面对面采访,生气的是可恶的小A把采访设备摔坏,不能拍照留念,校报没有照片怎么办。
很快,颁奖典礼开始了,“现在有请我们的世界冠军起来领奖,奖金100块和一本《挑战程序设计竞赛》,他就是小A!”,全场沸腾,想一睹冠军风采!
冠军缓缓走上奖台,小C定睛一看,“这不是那个撞我的男生吗?原来是他,终于找到了……”
“请冠军说说获奖感言!”主持人说到。
“本来是没有想得到这个冠军的,可是为了赔一个女生的单反就只好拿了冠军,可突然发现拿了冠军又能怎样呢?……”,全场同情。
颁奖典礼完毕后,小A找到了小C要赔她单反,小C故作镇定说到,“小子看不出来还挺厉害的嘛,我是校报记者叫小C,那你留个电话给我吧,到时候给我单反我顺便也采访你一下。”小A当然很乐意啦,留完电话小A就被人群包围住了,小C只好默默离开了……
Input
输入包括多组测试数据
每组测试数据的第一行是一个数字n表示题目数(0<n<=100000)
然后是n个整数表示第一次做出题目的参赛者编号,每个编号在[-10^9,10^9]内
Output
对于每组测试数据输出2个数,分别表示出现最多次的数和它出现的次数。(如果有多个同样次数的数,输出最小的那个)
Sample Input
5
1 2 1 2 3
Sample Output
1 2
1 /***********************************************************************************/ 2 水题,用这题目来尝试下Pair二元组的使用二元,可以忽略不看 3 包含:#include<utility> 且 algorithm 和 map 也包含了这个头文件 4 pair <type,type>Sum[100005];/*定义二元组的数组*/ 5 Sum.first;/*第一个元素,自己赋予含义即可*/ 6 Sum.second;/*第一个元素,自己赋予含义即可*/ 7 pair <pair<int ,int>a,int>SUM[100005];/*二元组可以嵌套使用*/ 8 SUM.pair.first;/*第一个元素,自己赋予含义即可*/ 9 SUM.pair.second;/*第一个元素,自己赋予含义即可*/ 10 /***********************************************************************************/ 11 #include <algorithm> 12 #include <iostream> 13 #include <stack> 14 #include <stdio.h> 15 #include <string.h> 16 using namespace std; 17 int MAX_NUM,Max; 18 void Judge(pair<int,int>Sum) /*判断结果*/ 19 { 20 if(Max<=Sum.second) 21 { 22 MAX_NUM=Sum.first; 23 Max=Sum.second; 24 } 25 return ; 26 } 27 int main() 28 { 29 SUM.pair. 30 int T,sign; 31 int Num[100005]; 32 while(scanf("%d",&T)!=EOF) 33 { 34 sign=-1;Max=1; 35 pair <int,int>Sum[100005]; /*定义二元组,first记录点的大小,second记录点的次数*/ 36 for(int i=0;i<T;i++) 37 scanf("%d",&Num[i]); /*输入每一个点*/ 38 sort(Num,Num+T); /*排序,升序*/ 39 for(int i=T-1;i>=0;i--) 40 { 41 if(i==T-1||(Sum[sign].first!=Num[i]))/*点不一样,进行判断和记录新的一个点*/ 42 { 43 if(sign>=0) 44 Judge(Sum[sign]); /*判断*/ 45 sign++; 46 Sum[sign].first=Num[i]; /*对下个记录的点初始化*/ 47 Sum[sign].second=1; /*对下个记录的点初始化*/ 48 } 49 else 50 { 51 Sum[sign].second++; /*点一样,记录的点数加1*/ 52 } 53 if(i==0)Judge(Sum[sign]); /*需要特判*/ 54 } 55 printf("%d %d\n",MAX_NUM,Max); /*输出出现的次数最多的点的大小和其所出现的次数*/ 56 } 57 return 0; 58 }