Codeforces Round #317 B. Order Book
阿新 • • 發佈:2018-11-01
簡單的排序 也可以通過雜湊完成
#include<iostream> #include<algorithm> #include<stdio.h> #define rep(i,a,b) for(int i = a ; i < b ; i++) #define rrep(i,a,b) for(int i = b-1 ; i >= a ; i--) using namespace std; struct node{ int p , q; }B[1000],S[1000],NOW,ANSS[1000]; bool cmpb(node a , node b) { if(a.p == b.p) return a.q < b.q; return a.p > b.p; } bool cmps(node a , node b) { if(a.p == b.p) return a.q < b.q; return a.p < b.p; } int main() { int n , s , cntb = 0 , cnts = 0 ,cntanss = 0; char str[5]; cin>> n >> s; rep(i,0,n) { scanf("%s%d%d",str,&NOW.p,&NOW.q); if(str[0] == 'B') B[cntb++] = NOW; else S[cnts++] = NOW; } sort(B,B+cntb,cmpb); sort(S,S+cnts,cmps); int ss = s; rep(i,0,cnts) { if(i+1 < cnts &&S[i].p == S[i+1].p) { S[i+1].q +=S[i].q; continue; } ss--; ANSS[cntanss++] = S[i]; if(ss == 0) break; } sort(ANSS,ANSS+cntanss,cmpb); rep(i,0,cntanss) printf("S %d %d\n",ANSS[i].p,ANSS[i].q); rep(i,0,cntb) { if(i+1 < cntb &&B[i].p == B[i+1].p) { B[i+1].q +=B[i].q; continue; } s--; printf("B %d %d\n",B[i].p,B[i].q); if(s == 0) break; } }