2020 年经开区青少年信息学竞赛初中组第一题统计新增
发布时间
阅读量:
阅读量
【题目描述】
二零二零年是一段特殊且值得铭记的时间段。在这段时间里,在全球范围内爆发了新型冠状病毒大流行,在此期间数千万生命在此时此刻消失在了这场灾难中。请在这个特殊的时刻向失去生命的同胞们表示深切的哀悼与祝福吧!这也提醒我们更加珍惜生命的价值与脆弱性。疫情发生期间,许多人都在默默关注着防疫工作进展。而当某段时间内新增病例数量下降时,请记住这种变化让人心情舒畅。根据题目所给的数据信息,请统计并输出您所观察国家每天的确诊新增人数。
【输入】
共有n+1行。其中前一行包含两个自然数n和m分别代表新增人员的数量以及总共的天数;随后的n行中每一行为两个字段数据:第一个自然数代表新增人员的时间位置;第二个字段对应国家名称。
【输出】
多行数据项将被描述为以下格式:每一行为一个国家及其对应的数据项。第一项为国家名称(英文字母序列),接下来的m个正整数分别表示该国第1天至第m天的日增人数值数据。所有数据将按国家名称的字典序排列并输出每个国家的名字。
【输入样例】
【输出样例】
【样例解释】
在过去的三天内收集了总共十条关于新增人员的信息,在这些信息中第一条记录显示第一天美国增加了一个人,在第二天日本增加了一个人,在第三天英国又增加了一个人。接着第二天的信息继续更新着其他国家的数据变化情况。具体包括四个国家:美国、中国、英格兰和日本。然后按照字典顺序依次列出每个国家在第一天、第二天和第三天的新增人数。
【数据规模及约定】
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;
}
全部评论 (0)
还没有任何评论哟~
