[算法练习] UVA 10420 - List of Conquests?

时间:2021-05-13 12:31:38

UVA Online Judge 题目10420 - List of Conquests

问题描述:

  题目很简单,给出一个出席宴会的人员列表,包括国籍和姓名(姓名完全没用)。统计每个国家有多少人参加,按国家名字典排序输出。

输入格式:

  第一行是一个整数n,表示参加人数的个数。接下来是n行,每行第一个单词为国家名称,后面为姓名。

输出格式:

  每行包括国家名称和出席人数,将国家名称按字典排序输出。

示例输入:

3
Spain Donna Elvira
England Jane Doe
Spain Donna Anna

示例输出:

England 1
Spain 2

代码:(直接用STL吧。。太懒了)

 #include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std; struct Country{
string name;
int count = ;
bool operator == (const Country& b) {
return this->name == b.name;
}
}; int cmp(const Country& a, const Country& b){ return a.name < b.name; } vector<Country> Countries;
int main()
{
int n;
char str[];
scanf("%d", &n);
for (int i = ; i < n; i++)
{
scanf("%s", str); //获得国家名
char c;
c = getchar();
while (c != '\n'&&c != EOF){ c = getchar(); } //忽视姓名
Country nowCt;
nowCt.name = str;
vector<Country>::iterator iter = find(Countries.begin(), Countries.end(), nowCt);
if (iter == Countries.end())
{
nowCt.count = ;
Countries.push_back(nowCt);
}
else
{
iter->count++;
}
}
sort(Countries.begin(), Countries.end(), cmp); //排序
for (vector<Country>::iterator it = Countries.begin(); it != Countries.end();it++)
{
cout << it->name << " " << it->count << endl;
}
return ;
}