PICNIC 문제 시간초과가 나네요. techneer 안녕하세요. PICNIC 문제를 풀고 있는데요, 로컬에서 돌려보면 답은 잘 나오는데, algospot 에서 제출하면, 계속 시간초과가 납니다. 재귀호출로 했고, 수행회수는 크게 문제 없어 보이는데요. 혹시 잘 아시는 분 있으면 부탁드립니다. PICNIC문제 링크 #include <iostream> #include <map> #include <utility> #include <vector> using namespace std; int get_pair_count( int n, int depth, vector< pair<int, int> > s_pair, vector<int> flags , vector<int> comb) { if ( depth == n / 2 ) { vector<int> found(n); for ( int i = 0; i < found.size(); i++ ) found[i] = 0; for ( int i = 0; i < comb.size(); i++ ) { found[ s_pair[comb[i]].first ] = 1; found[ s_pair[comb[i]].second ] = 1; } for ( int i = 0; i < found.size(); i++ ) if ( found[i] == 0 ) return 0; return 1; } int pair_count = 0; int start = 0; for ( start = s_pair.size() - 1; start >= 0 && flags[start] == -1; start-- ); start++; for ( int i = start; i < s_pair.size(); i++ ) { if ( flags[i] == -1 ) { flags[i] = 1; comb[depth] = i; pair_count += get_pair_count( n, depth + 1, s_pair, flags, comb ); flags[i] = -1; } } return pair_count; } int main() { int c; int n; int m; vector< pair<int, int> > s_pair; vector< int > flags; vector< int > comb; cin >> c; for (int i = 0; i < c; i++) { cin >> n >> m; for (int j = 0; j < m; j++) { int s1, s2; cin >> s1 >> s2; s_pair.push_back( pair<int,int>( s1, s2 ) ); } for (int j = 0; j < m; j++) flags.push_back( -1 ); for (int j = 0; j < n / 2; j++) comb.push_back( -1 ); int count = get_pair_count( n, 0, s_pair, flags, comb ); cout << count; s_pair.clear(); flags.clear(); comb.clear(); } } 10년 전
1개의 댓글이 있습니다. 일루 가능한 가장 큰 케이스를 넣어보니 0.5초 정도의 시간이 걸립니다. 테스트 케이스가 여러 개라면 시간 초과가 날 것 같습니다. 10년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
techneer
안녕하세요.
PICNIC 문제를 풀고 있는데요, 로컬에서 돌려보면 답은 잘 나오는데, algospot 에서 제출하면, 계속 시간초과가 납니다. 재귀호출로 했고, 수행회수는 크게 문제 없어 보이는데요. 혹시 잘 아시는 분 있으면 부탁드립니다.
PICNIC문제 링크
10년 전