【题目描述】
2020 年是一个不平凡的年份。在这一年,新型冠状病毒在全球肆虐,很多人因此失去了自己宝贵的生命。此时此刻,请默默的为这些逝去的生命送上我们的祝福,希望他们一路走好。也希望正在看题目的你能更深刻的认识生命,珍惜生命。疫情期间,很多人都在默默关注着防疫工作,当这一天的新增人数减少了,大家的内心都会轻松很多。现给出一段时间内全球新增人员的信息,请统计输出题目给出的国家每天新增的人数。
【输入】
共 n+1 行。第一行两个正整数 n 和 m,分别表示接下来有 n 条新增人员的信息以及一共有 m 天;接下来的 n 行,每行有两个内容,第一个正整数表示是在第几天新增的,第二个字符串为国家的名称。
【输出】
若干行,每行 m+1 个内容,第一个是国家名称,后面 m 个正整数分别表示这个国家第 1 天,第 2 天,……,第 m 天新增的人数。输出请按照国家名称的字典序。每个国家的名字都是英文字母,且首字母肯定是大写字母。
【输入样例】
10 3 1 America 2 Japan 1 England 3 America 2 America 3 Japan 2 China 1 Japan 3 America 3 America
【输出样例】
America 1 1 3 China 0 1 0 England 1 0 0 Japan 1 1 1
【样例解释】
一共给了 3 天内 10 条新增人员的信息,第 1 条表示第 1 天 America 新增 1 人,第 2 条表示第 2 天 Japan 新增 1 人,第 3 条表示第 1 天 England 新增 1 人,第 4 条表示第 3 天 America 新增 1 人,以此类推。 一共有 4 个国家,按照字典序依次是 America ,China,England 和 Japan。对于每个国家依次输出第 1 天,第 2 天和第 3 天新增的人数。
【数据规模及约定】
1<=国家数<=197。
60%的数据,1<=n<=1000,1<=m<=10。
100%的数据,1<=n<=1000000,1<=m<=100。
这一道题的难点:排序+桶;
#include<bits/stdc++.h>
using namespace std;
int n,m,t,k;
char s[30];
struct node//结构体
{
int a[101];
char name[30];
}b[198];//最多有197个国家
bool cmp(node x,node y)//cmp排序,升序
{
if(strcmp(y.name,x.name)>0) return 1;
else return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d%s",&t,s);//s前不加&。s是字符数组
int flag=0;
for(int j=1;j<=k;j++)
if(strcmp(s,b[j].name)==0)
{
b[j].a[t]++;
flag=1;
break;
}
if(flag==0)
{
k++;
strcpy(b[k].name,s);
b[k].a[t]++;
}
}
sort(b+1,b+1+k,cmp);
for(int i=1;i<=k;i++)
{
printf("%s ",b[i].name);
for(int j=1;j<=m;j++)
printf("%d ",b[i].a[j]);
printf("\n");
}
return 0;
}