POJ 2379
#include <iostream> #include <algorithm> #define MAXN 1005 using namespace std; struct node { bool p[21]; int sum; int pre_sum[21]; int num_pro; int team; }; node _m[MAXN]; struct node_1 { int k[4]; }; node_1 in[MAXN]; int test; int num; bool op(node a,node b); void init(); bool op_1(node_1 a,node_1 b); int main() { int i; int j; int team; int pro; int time; int res; //freopen("acm.acm","r",stdin); cin>>num>>test; for(i = 0; i < test; ++ i) { for(j = 0; j < 4; ++ j) { cin>>in[i].k[j]; } } sort(in,in+test,op_1); init(); for(i = 0; i < test; ++ i) { team = in[i].k[0]; pro = in[i].k[1]; time = in[i].k[2]; res = in[i].k[3]; if(_m[team].p[pro] == false) { if(res == 0) { _m[team].pre_sum[pro] += 1200; } else { _m[team].sum += time; _m[team].sum += _m[team].pre_sum[pro]; ++ _m[team].num_pro; _m[team].p[pro] = true; } } } sort(_m+1,_m+num+1,op); for(i = 1; i < num; ++ i) { cout<<_m[i].team<<" "; } cout<<_m[i].team; } bool op_1(node_1 a,node_1 b) { if(a.k[2] < b.k[2]) return true; return false; } bool op(node a,node b) { if(a.num_pro > b.num_pro) { return true; } else if(a.num_pro == b.num_pro) { if(a.sum < b.sum) return true; else if(a.sum == b.sum) { if(a.team < b.team) return true; else return false; } else return false; } else return false; } void init() { int i; int j; for(i = 1; i <= num; ++ i) { for(j = 1; j < 21; ++ j) { _m[i].p[j] = false; _m[i].pre_sum[j] = 0; } _m[i].team = i; _m[i].sum = 0; _m[i].num_pro = 0; } }