找最大重复次数的数和重复次数(C++ Pair)

Problem A: 第一集 你好,世界冠军

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 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 }
View Code

 

posted @ 2015-04-15 01:16  Wurq  阅读(2030)  评论(0编辑  收藏  举报