AOJ - Problem 1043 : Selecting Teams Advanced to Regional
ICPCのコンテストのチームの選抜に関する問題です。これくらいの問題は簡単に解けないとICPCでは歯が立たないレベルですね。
4つのデータ(正解数,ペナルティ,ID,所属)をpair
#include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main(){ int n; while( cin >> n , n ){ vector<pair<int,pair<int,pair<int,int> > > > vc; vector<int> ans; int u[1001] = {0}; for(int i=0 ; i < n ; i++ ){ int ID,Univ,AC,WA; cin >> ID >> Univ >> AC >> WA; pair<int,int> a(ID,Univ); pair<int,pair<int,int> > b(WA,a); pair<int,pair<int,pair<int,int> > > c(-AC,b); vc.push_back( c ); } sort( vc.begin() , vc.end() ); for(int i=0 ; i < n ; i++ ){ int AC = -vc[i].first; int WA = vc[i].second.first; int ID = vc[i].second.second.first; int Univ = vc[i].second.second.second; if( ans.size() < 10 && u[Univ] < 3 ){ ans.push_back( ID ); u[Univ]++; }else if( ans.size() < 20 && u[Univ] < 2 ){ ans.push_back( ID ); u[Univ]++; }else if( ans.size() < 26 && u[Univ] < 1 ){ ans.push_back( ID ); u[Univ]++; } } for(int i=0 ; i < ans.size() ; i++ ){ cout << ans[i] << endl; } } }