PATA1080题解

xiaoxiao2021-02-28  21

// // main.cpp // PATA1080 // // Created by Phoenix on 2018/2/18. // Copyright © 2018年 Phoenix. All rights reserved. // #include <iostream> #include <cstdio> #include <vector> #include <algorithm> using namespace std; const int maxn = 40010; int n, m, k; int school[110]; struct node { int id; int Ge, Gi; int sch[6]; }stu[maxn]; bool cmp(node a, node b) { if(a.Ge + a.Gi != b.Ge + b.Gi) return a.Ge + a.Gi > b.Ge + b.Gi; else return a.Ge > b.Ge; } int main(int argc, const char * argv[]) { scanf("%d %d %d", &n, &m, &k); for(int i = 0; i < m; i++) { scanf("%d", &school[i]); } for(int i = 0; i < n; i++) { stu[i].id = i; scanf("%d %d", &stu[i].Ge, &stu[i].Gi); for(int j = 0; j < k; j++) { scanf("%d", &stu[i].sch[j]); } } sort(stu, stu + n, cmp); vector<int> s[m]; int grade[m][2]; for(int i = 0; i < n; i++) { for(int j = 0; j < k; j++) { int sch = stu[i].sch[j]; if(school[sch]) { s[sch].push_back(stu[i].id); school[sch]--; if(school[sch] == 0) { grade[sch][0] = stu[i].Ge; grade[sch][1] = stu[i].Gi; } break; } if(school[sch] == 0 && stu[i].Ge == grade[sch][0] && stu[i].Gi == grade[sch][1]) { s[sch].push_back(stu[i].id); break; } } } for(int i = 0; i < m; i++) { sort(s[i].begin(), s[i].end()); for(int j = 0; j < s[i].size(); j++) { printf("%d", s[i][j]); if(j < s[i].size() - 1) printf(" "); } printf("\n"); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-2628462.html

最新回复(0)