MATCHORDER 문제 질문 합니다.
JM책에 있는 소스코드를 그대로 답안제출을 했는데
왜 안되는건가요??
JM책에 있는 소스코드가 잘못된건가요??
테스트를 해보려고 제출을 시도해보았는데
시간초과라고 뜹니다.
왜그러는지 알려주세용~
혹시 코드가 잘못된거라면 제대로된 코드 부탁드립니다.
코드는
#include<set>#include<cstdio>#include<cassert>#include<algorithm>#include<cstdlib>#include<iostream>#include<string>#include<vector>usingnamespacestd;intbrute(constvector<int>&russian,vector<int>korean){sort(korean.begin(),korean.end());intret=0;do{intwins=0;for(inti=0;i<korean.size();i++)if(korean[i]>=russian[i])++wins;ret=max(wins,ret);}while(next_permutation(korean.begin(),korean.end()));returnret;}intgreedy(constvector<int>&russian,vector<int>korean){intn=russian.size();vector<bool>taken(n,false);sort(korean.begin(),korean.end(),greater<int>());intret=0;for(intkor=0;kor<n;kor++){intopponent=-1;for(intrus=0;rus<n;rus++)if(!taken[rus]&&russian[rus]<=korean[kor]&&(opponent==-1||russian[opponent]<=russian[rus]))opponent=rus;if(opponent==-1)break;++ret;taken[opponent]=true;}returnret;}intgreedy2(constvector<int>&russian,constvector<int>&korean){intn=russian.size(),wins=0;// 아직 남아 있는 선수들의 레이팅multiset<int>ratings(korean.begin(),korean.end());for(intrus=0;rus<n;rus++){// 가장 레이팅이 높은 한국 선수가 이길 수 없는 경우 가장 레이팅이 낮은 선수와 경기시킨다.if(*ratings.rbegin()<russian[rus])ratings.erase(ratings.begin());// 그 외의 경우 이길 수 있는 선수 중 가장 레이팅이 낮은 선수와 경기시킨다.else{ratings.erase(ratings.lower_bound(russian[rus]));++wins;}}returnwins;}intmain(){intiter=0;while(true){intn=rand()%8+1;vector<int>rus(n),kor(n);for(inti=0;i<n;i++){rus[i]=rand()%3000;kor[i]=rand()%3000;}assert(brute(rus,kor)==greedy(rus,kor));assert(greedy(rus,kor)==greedy2(rus,kor));if(++iter%1000==0)printf("%d ..\n",iter);}}
anypro12
MATCHORDER 문제 질문 합니다.
JM책에 있는 소스코드를 그대로 답안제출을 했는데
왜 안되는건가요??
JM책에 있는 소스코드가 잘못된건가요??
테스트를 해보려고 제출을 시도해보았는데
시간초과라고 뜹니다.
왜그러는지 알려주세용~
혹시 코드가 잘못된거라면 제대로된 코드 부탁드립니다.
코드는
11년 전