#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.