View Code of Problem 100

#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
double getTime(string time) {
	return (time[1] - '0') * 60 + (time[3] - '0') * 10 + time[4] - '0';
}
int main() {
	int n,m,k;
	map<string, double> song;
	map<string, double> re;
	string songName[100];
	double Return[100];
	while (cin >> n && n != 0) {
		k = n;
		while (n--) {
			string name,time;
			cin >> name>>time;
			//创建歌名和时间的对照map
			song[name] = getTime(time);
			re[name] = 0;
		}
		cin >> m;
		while (m--) {
			string name, time;
			cin >> name >> time;
			int grade;
			if (getTime(time) < song[name] * 0.2) {
				grade = 0;
			}
			else if (getTime(time) >= song[name] * 0.2 && getTime(time) < song[name] * 0.4) {
				grade = 1;
			}
			else if (getTime(time) >= song[name] * 0.4 && getTime(time) < song[name] * 0.6) {
				grade = 2;
			}
			else if (getTime(time) >= song[name] * 0.6 && getTime(time) < song[name] * 0.8) {
				grade = 3;
			}
			else if (getTime(time) >= song[name] * 0.8 && getTime(time) < song[name]) {
				grade = 4;
			}
			else {
				grade = 5;
			}
			re[name] += grade;
			map<string, double>::iterator item=re.begin();
			for (int i = 0; i < re.size(); i++)
			{
				songName[i] =item->first;
				Return[i] = item->second;
				item++;
			}
		}
		for (int i = 0; i < k; i++)
		{
			for (int j = i; j < k; j++)
			{
				if (Return[i] < Return[j]) {
					int temp1 = Return[i];
					string temp2 = songName[i];
					Return[i] = Return[j];
					Return[j] = temp1;
					songName[i] = songName[j];
					songName[j] = temp2;
				}
			}
		}
		for (int i = 0; i < k; i++)
		{
			cout << songName[i] << " " << Return[i];
			if (i != k - 1)cout << endl;
		}
	}
	
}

Double click to view unformatted code.


Back to problem 100