42:出书最多

42:出书最多

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

假定图书馆新进了m(10 ≤ m ≤ 999)本图书,它们都是由n(1 ≤ n ≤ 26)个作者独立或相互合作编著的。假设m本图书编号为整数(1到999),作者的姓名为字母('A'到'Z'),请根据图书作者列表找出参与编著图书最多的作者和他的图书列表。

输入
第一行为所进图书数量m,其余m行,每行是一本图书的信息,其中第一个整数为图书编号,接着一个空格之后是一个由大写英文字母组成的没有重复字符的字符串,每个字母代表一个作者。输入数据保证仅有一个作者出书最多。
输出
输出有多行: 
第一行为出书最多的作者字母; 
第二行为作者出书的数量; 
其余各行为作者参与编著的图书编号(按输入顺序输出)。
样例输入
11
307 F
895 H
410 GPKCV
567 SPIM
822 YSHDLPM
834 BXPRD
872 LJU
791 BPJWIA
580 AGMVY
619 NAFL
233 PDJWXK
样例输出
P
6
410
567
822
834
791
233
来源
北京大学 计算概论 06 心理及信管 期末考试
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 int a[10001];
 6 int now;
 7 int sl[10001];
 8 struct node
 9 {
10     int a;//编号 
11     char b[1001];//作者 
12     int lb;
13 }gs[1001];
14 int maxn=-1;
15 char ans;
16 int main()
17 {
18     int n;
19     cin>>n;
20     for(int i=1;i<=n;i++)
21     {
22         cin>>gs[i].a;
23         //gets(gs[i].b);
24         scanf("%s",&gs[i].b);
25         for(int j=0;j<strlen(gs[i].b);j++)
26         {
27             sl[gs[i].b[j]]++;
28             if(sl[gs[i].b[j]]>maxn)
29             {
30                 ans=gs[i].b[j];
31                 maxn=sl[gs[i].b[j]];
32             }
33         }
34     }
35     cout<<ans<<endl;
36     cout<<maxn<<endl;
37     for(int i=1;i<=n;i++)
38     {
39         for(int j=0;j<strlen(gs[i].b);j++)
40         {
41             if(gs[i].b[j]==ans)
42             {
43                 cout<<gs[i].a<<endl;
44             }
45         }
46     }
47     
48     return 0;
49 }

 

posted @ 2017-03-17 14:59  自为风月马前卒  阅读(1030)  评论(0编辑  收藏  举报

Contact with me