Advertisement

2020 年经开区青少年信息学竞赛初中组第一题统计新增

阅读量:

【题目描述】

二零二零年是一段特殊且值得铭记的时间段。在这段时间里,在全球范围内爆发了新型冠状病毒大流行,在此期间数千万生命在此时此刻消失在了这场灾难中。请在这个特殊的时刻向失去生命的同胞们表示深切的哀悼与祝福吧!这也提醒我们更加珍惜生命的价值与脆弱性。疫情发生期间,许多人都在默默关注着防疫工作进展。而当某段时间内新增病例数量下降时,请记住这种变化让人心情舒畅。根据题目所给的数据信息,请统计并输出您所观察国家每天的确诊新增人数。

【输入】

共有n+1行。其中前一行包含两个自然数nm分别代表新增人员的数量以及总共的天数;随后的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)

还没有任何评论哟~