UVa : 11804 - Argentina
問題概要
http://uva.onlinejudge.org/external/118/11804.html
10人の選手の内, 5人をアタッカーに, 残り5人をディフェンダーに選ぶプログラムを作る問題.
各選手には, 名前がついていて, アタック能力とディフェンス能力がある.
ただし, 次の条件を満たすように選手を選ぶ必要がある.
- アタッカーにする選手5人のアタック能力の合計は, 最大にする必要がある
- そのような選び方が複数通りある場合, ディフェンスにする選手5人のディフェンス能力の合計を最大にする
- それでも選び方が複数通りある場合, 辞書式順で早い順に選ぶ
プログラム
class P{ public: string name; //なまえ int a,d; //アタック能力,ディフェンス能力 P(){} bool operator<(const P &p)const{ if(a == p.a){ if(d == p.d) return name < p.name; return d < p.d; } return a > p.a; } }; void disp(P *p){ string name[5]; rep(i,5) name[i] = p[i].name; sort(name,name+5); cout<<"("; rep(i,5){ if(i != 0) cout<<", "; cout<<name[i]; } cout<<")\n"; } int main(){ int T; cin>>T; REP(SET,1,T+1){ cout<<"Case "<<SET<<":\n"; P p[10]; rep(i,10) cin>>p[i].name>>p[i].a>>p[i].d; sort(p,p+10); disp(p); disp(p+5); } }