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

【题目描述】

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;
 }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值