2021年2月9日 星期二

f634: 士兵歸來

解題心得:
https://codist.me/zh/blog/stl-set/

程式碼:

#include <iostream>
#include <set>
#include <iomanip>
using namespace std;

struct soldier
{
	string name;
	int type, rank;
	bool operator<(const soldier &right) const
	{
		if (name != right.name)
			return name < right.name;
		else
		{
			if (type != right.type)
				return type < right.type;
			else
				return rank < right.rank;
		}
	}
};
int main()
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(0);
	int n, m;
	cin >> n >> m;
	set<soldier> legion;
	while (m--)
	{
		soldier tmp;
		cin >> tmp.name >> tmp.type >> tmp.rank;
		legion.insert(tmp);
	}
	int navy = 0, army = 0, air = 0, officer = 0, sergeant = 0, soldier = 0;
	for (auto it = legion.begin(); it != legion.end(); it++)
	{
		if ((*it).type == 1) navy++;
		if ((*it).type == 2) army++;
		if ((*it).type == 3) air++;
		if ((*it).rank == 1) officer++;
		if ((*it).rank == 2) sergeant++;
		if ((*it).rank == 3) soldier++;
	}
	cout << "navy:" << navy << " army:" << army << " air:" << air << endl;
	cout << "officer:" << officer << " sergeant:" << sergeant << " soldier:" << soldier << endl;
	cout << fixed << setprecision(1) << "survival rate: " << (double)legion.size() / n * 100 << "%";
	
	return 0;
}

沒有留言:

張貼留言