总时间限制:
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
-
本题考查的是对字符串的运用及提取字符和循环的综合应用,下面附上ac代码。
-
#include<stdio.h> #include<string.h> int main() { int n,a[1001]={0},s[27]={0},i,j,maxi=-1,k,l; char b[1001][27]={0}; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d %s",&a[i],&b[i]); for(i=1;i<=n;i++) { l=strlen(b[i]); for(j=0;j<l;j++) { s[b[i][j]-'A']++; } } for(i=0;i<26;i++) { if(s[i]>maxi) { maxi=s[i]; k=i; } } printf("%c\n",'A'+k); printf("%d\n",maxi); for(i=1;i<=n;i++) { l=strlen(b[i]); for(j=0;j<l;j++) { if(b[i][j]-'A'==k) { printf("%d\n",a[i]); } } } return 0; }