For a student taking the online course "Data Structures" on China University MOOC (http://www.icourse163.org/), to be qualified for a certificate, he/she must first obtain no less than 200 points from the online programming assignments, and then receive a final grade no less than 60 out of 100. The final grade is calculated by G=(Gmid−term×40%+Gfinal×60%) if Gmid−term>Gfinal, or Gfinal will be taken as the final grade G. Here Gmid−term and Gfinal are the student's scores of the mid-term and the final exams, respectively.
The problem is that different exams have different grading sheets. Your job is to write a program to merge all the grading sheets into one.
Each input file contains one test case. For each case, the first line gives three positive integers: P , the number of students having done the online programming assignments; M, the number of students on the mid-term list; and N, the number of students on the final exam list. All the numbers are no more than 10,000.
Then three blocks follow. The first block contains P online programming scores Gp's; the second one contains M mid-term scores Gmid−term's; and the last one contains N final exam scores Gfinal's. Each score occupies a line with the format: StudentID Score, where StudentID is a string of no more than 20 English letters and digits, and Score is a nonnegative integer (the maximum score of the online programming is 900, and that of the mid-term and final exams is 100).
For each case, print the list of students who are qualified for certificates. Each student occupies a line with the format:
StudentID Gp Gmid−term Gfinal G
If some score does not exist, output "−1" instead. The output must be sorted in descending order of their final grades (G must be rounded up to an integer). If there is a tie, output in ascending order of their StudentID's. It is guaranteed that the StudentID's are all distinct, and there is at least one qullified student.
- 6 6 7
- 01234 880
- a1903 199
- ydjh2 200
- wehu8 300
- dx86w 220
- missing 400
- ydhfu77 99
- wehu8 55
- ydjh2 98
- dx86w 88
- a1903 86
- 01234 39
- ydhfu77 88
- a1903 66
- 01234 58
- wehu8 84
- ydjh2 82
- missing 99
- dx86w 81
- missing 400 -1 99 99
- ydjh2 200 98 82 88
- dx86w 220 88 81 84
- wehu8 300 55 84 84
- #include
- #include
- #include
- #include
- using namespace std;
-
- struct Stu {
- string id;
- int gp, gm, gf, g;
- } a[10010];
- map
s; - map
bool> visp, vism, visf; - int p, m, n, t, cnt;
- string x;
-
- bool cmp(Stu s1, Stu s2) {
- return s1.g == s2.g ? s1.id
s2.g; - }
-
- int main() {
- cin >> p >> m >> n;
- for (int i = 0; i < p; i++) {
- cin >> x >> t;
- if (t >= 200) {
- visp[x] = 1;
- Stu u;
- u.id = x;
- u.gp = t;
- u.gm = u.gf = 0;
- s[x] = u;
- }
- }
- for (int i = 0; i < m; i++) {
- cin >> x >> t;
- if (visp[x]) {
- s[x].gm = t;
- vism[x] = 1;
- }
- }
- for (int i = 0; i < n; i++) {
- cin >> x >> t;
- if (visp[x]) {
- s[x].gf = t;
- visf[x] = 1;
- }
- }
- for (map
::iterator it = s.begin(); it != s.end(); it++) { - if (it->second.gm > it->second.gf) {
- it->second.g = (int)(0.4 * it->second.gm + 0.6 * it->second.gf + 0.5);
- } else {
- it->second.g = it->second.gf;
- }
- if (!vism[it->first]) {
- it->second.gm = -1;
- }
- if (!visf[it->first]) {
- it->second.gf = -1;
- }
- if (it->second.g >= 60) {
- a[cnt++] = it->second;
- }
- }
- sort(a, a + cnt, cmp);
- for (int i = 0; i < cnt; i++) {
- cout << a[i].id << ' ' << a[i].gp << ' ' << a[i].gm << ' ' << a[i].gf << ' ' << a[i].g << endl;
- }
- return 0;
- }