A1141 PAT Ranking of Institutions [stl]

在这里插入图片描述
注意最后一个测试点用unordered_map

#include<iostream>
#include<vector>
#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<set>
#include<queue>
#include<unordered_map>
using namespace std;
const int maxn = 100001;
struct node
{
	string name;
	int endscore;
	double score;
	int count;
};
vector<node>v;
unordered_map<string, int>m;
unordered_map<string, int>Rank;
bool cmp(node a, node b)
{
	if (a.endscore != b.endscore)
		return a.endscore > b.endscore;
	else if (a.count != b.count)
		return a.count < b.count;
	else
		return a.name < b.name;
}
string dazhuanxiao(string s)
{
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] <= 'Z' && s[i]>='A')
		{
			s[i] = s[i] + 32;
		}
	}
	return s;
}
int main()
{
	int n; cin >> n; int cnt = 1;
	string id, name; double score;
	for (int i = 0; i < n; i++)
	{
		cin >> id >> score >> name;
		name = dazhuanxiao(name);
		if (m[name] != 0)
		{
			if (id[0] == 'T')
			{
				v[m[name] - 1].score += score*1.5;
				v[m[name] - 1].count++;
			}
			else if (id[0] == 'A')
			{
				v[m[name] - 1].score += score;
				v[m[name] - 1].count++;
			}
			else
			{
				v[m[name] - 1].score += score/(1.5);
				v[m[name] - 1].count++;
			}
		}
		else {
			if (id[0] == 'T')
			{
				v.push_back(node{ name, 0,score*1.5,1});
			}
			else if (id[0] == 'A')
			{
				v.push_back(node{ name, 0,score,1});
			}
			else
			{
				v.push_back(node{ name, 0,score/(1.5),1});
			}
			m[name] = cnt++;
		}
	}
	for (int i = 0; i < v.size(); i++)
	{
		v[i].endscore = int(v[i].score);
	}
	sort(v.begin(), v.end(), cmp);
	Rank[v[0].name] = 1;
	for (int i = 1; i < v.size(); i++)
	{
		if (v[i].endscore == v[i - 1].endscore)
			Rank[v[i].name] = Rank[v[i - 1].name];
		else
			Rank[v[i].name] = i + 1;
	}
	cout << v.size() << endl;
	for (int i = 0; i < v.size(); i++)
	{
	
		cout << Rank[v[i].name] << " " << v[i].name << " " << v[i].endscore << " " << v[i].count << endl;
	}
}
原文地址:https://www.cnblogs.com/Hsiung123/p/13811957.html