@xunuo
2017-03-19T18:01:31.000000Z
字数 980
阅读 1069
结构体
正如题目所说,下面这个题目是关于吃饭的问题的QAQ。现在ACM集训队有14位大二大三大四的队员,然后每个人每天都会不定的吃几碗饭,某一天上决╇ф想找出谁是在最近n天里面吃饭最多的人,这里吃饭用碗数来计算。然后要我们找到这个吃饭最多的人是谁?
输入一个数n,代表最近的n天。然后接下来n行,每行列出了每个队员的吃饭数量(每行秒描述14位队员的吃饭情况),也就是多少碗,输入顺序是固定的,按照样例t的输入格式。一定是样例中的14个人!
要你输出这最近n天吃饭数最多的人的名字简称。如果两位队员吃饭数量相同,输出姓名简称字典序小的。
3
Zxy 3 Lyy 3 Dt 3 Hsh 10 Wdl 3 Yxr 3 Qmc 4 Dl 4 Ljl 4 Lt 4 Wwr 5 Hy 7 Wmq 6 Lc 3
Zxy 4 Lyy 4 Dt 5 Hsh 7 Wdl 3 Yxr 7 Qmc 4 Dl 4 Ljl 4 Lt 6 Wwr 5 Hy 8 Wmq 7 Lc 3
Zxy 3 Lyy 4 Dt 4 Hsh 10 Wdl 3 Yxr 7 Qmc 5 Dl 7 Ljl 3 Lt 5 Wwr 4 Hy 5 Wmq 7 Lc 2
Hsh
Hint
1≤n≤10^5, 每个人每天吃饭的碗数≤10^10
完整代码:
#include<bits/stdc++.h>
using namespace std;
long long sum[15],vis[15];
char ans[5];
struct node
{
char s[5];
int v;
}a[15];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(sum,0,sizeof(sum));
memset(vis,0,sizeof(vis));
memset(ans,'Zzzzz',sizeof(ans));
for(int i=0;i<n;i++)
for(int j=0;j<14;j++)
{
scanf("%s%d",a[j].s,&a[j].v);
sum[j]+=a[j].v;
vis[j]=sum[j];
}
sort(sum,sum+14);
for(int i=0;i<14;i++)
if(vis[i]==sum[13]&&(strcmp(ans,a[i].s)>0))
swap(ans,a[i].s);
printf("%s\n",ans);
}
}