MATCHORDER 문제 질문 합니다.
JM책에 있는 소스코드를 그대로 답안제출을 했는데
왜 안되는건가요??
JM책에 있는 소스코드가 잘못된건가요??
테스트를 해보려고 제출을 시도해보았는데
시간초과라고 뜹니다.
왜그러는지 알려주세용~
혹시 코드가 잘못된거라면 제대로된 코드 부탁드립니다.
코드는
~~~ c++
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int brute(const vector& russian, vector korean) {
sort(korean.begin(), korean.end());
int ret = 0;
do {
int wins = 0;
for(int i = 0; i < korean.size(); i++)
if(korean[i] >= russian[i])
++wins;
ret = max(wins, ret);
} while(next_permutation(korean.begin(), korean.end()));
return ret;
}
int greedy(const vector& russian, vector korean) {
int n = russian.size();
vector taken(n, false);
sort(korean.begin(), korean.end(), greater());
int ret = 0;
for(int kor = 0; kor < n; kor++) {
int opponent = -1;
for(int rus = 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;
}
return ret;
}
int greedy2(const vector& russian, const vector& korean) {
int n = russian.size(), wins = 0;
// 아직 남아 있는 선수들의 레이팅
multiset ratings(korean.begin(), korean.end());
for(int rus = 0; rus < n; rus++) {
// 가장 레이팅이 높은 한국 선수가 이길 수 없는 경우 가장 레이팅이 낮은 선수와 경기시킨다.
if(*ratings.rbegin() < russian[rus])
ratings.erase(ratings.begin());
// 그 외의 경우 이길 수 있는 선수 중 가장 레이팅이 낮은 선수와 경기시킨다.
else {
ratings.erase(ratings.lower_bound(russian[rus]));
++wins;
}
}
return wins;
}
int main() {
int iter = 0;
while(true) {
int n = rand() % 8 + 1;
anypro12
MATCHORDER 문제 질문 합니다.
JM책에 있는 소스코드를 그대로 답안제출을 했는데
왜 안되는건가요??
JM책에 있는 소스코드가 잘못된건가요??
테스트를 해보려고 제출을 시도해보았는데
시간초과라고 뜹니다.
왜그러는지 알려주세용~
혹시 코드가 잘못된거라면 제대로된 코드 부탁드립니다.
코드는
~~~ c++
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int brute(const vector& russian, vector korean) {
sort(korean.begin(), korean.end());
int ret = 0;
do {
int wins = 0;
for(int i = 0; i < korean.size(); i++)
if(korean[i] >= russian[i])
++wins;
ret = max(wins, ret);
} while(next_permutation(korean.begin(), korean.end()));
return ret;
}
int greedy(const vector& russian, vector korean) { taken(n, false);());
int n = russian.size();
vector
sort(korean.begin(), korean.end(), greater
int ret = 0;
for(int kor = 0; kor < n; kor++) {
int opponent = -1;
for(int rus = 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;
}
return ret;
}
int greedy2(const vector& russian, const vector& korean) { ratings(korean.begin(), korean.end());
int n = russian.size(), wins = 0;
// 아직 남아 있는 선수들의 레이팅
multiset
for(int rus = 0; rus < n; rus++) {
// 가장 레이팅이 높은 한국 선수가 이길 수 없는 경우 가장 레이팅이 낮은 선수와 경기시킨다.
if(*ratings.rbegin() < russian[rus])
ratings.erase(ratings.begin());
// 그 외의 경우 이길 수 있는 선수 중 가장 레이팅이 낮은 선수와 경기시킨다.
else {
ratings.erase(ratings.lower_bound(russian[rus]));
++wins;
}
}
return wins;
}
int main() {
int iter = 0;
while(true) {
int n = rand() % 8 + 1;
}
12년 전