답안 #72796

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
72796 2018-08-27T00:59:00 Z dmfr Detecting Molecules (IOI16_molecules) C++11
31 / 100
1000 ms 29884 KB
#include "molecules.h"

#include <map>
#include <deque>
#include <vector>

#include <algorithm>

#include <iostream>

using namespace std;

typedef pair<int,int> pii;

/*
4 15 17
6 8 8 7
=>2
=>2 3

4 14 15
5 5 6 6
=>0

4 10 20
15 17 16 18
=>1
=>3

4 0 0
0 0 0 0

*/

vector<int> find_subset(int l, int u, vector<int> w) {
    const int& N = w.size();

    vector<pii> wVtr(N);
    for(int i = 0; i < N; ++i)
        wVtr[i] = pii(w[i], i);

    sort(wVtr.begin(), wVtr.end());
    while(!wVtr.empty() && wVtr.front().first > u) wVtr.pop_back();
    if(wVtr.empty())                      return vector<int>(0);
    if(l <= wVtr.back().first && wVtr.back().first <= u) return vector<int>(1,wVtr.back().second);
    reverse(wVtr.begin(),wVtr.end());

//    cout << "wVtr:";
//    for(const auto& i:wVtr) cout << i.first << " ";
//    cout << endl;

    int UpperBound = u;
    vector<int> LowerBound(N);
    LowerBound[N-1] = l;
    for(int i = N-2; i >= 0; --i)
        LowerBound[i] = max(LowerBound[i+1] - wVtr[i+1].first, 0);

//    cout << "LowerBound:";
//    for(const auto& i:LowerBound) cout << i << " ";
//    cout << endl;

    vector<pair<bool,deque<int>>> PossibleNumbers(UpperBound+1);
    PossibleNumbers[0] = pair<bool,deque<int>>(true, deque<int>());
    deque<pair<int,deque<int>>> ToInsert;
    for(int i = 0; i < N; ++i){
        const pii& w_i = wVtr[i];
        const int& LowerBound_i = LowerBound[i];
        for(int j = 0; j <= UpperBound; ++j){
            const auto& n = PossibleNumbers[j];
            if(n.first && (LowerBound_i <= j+w_i.first && j+w_i.first <= UpperBound)){
                ToInsert.push_back(pair<int,deque<int>>(j+w_i.first, n.second));
                ToInsert.back().second.push_back(w_i.second);
            }
        }
        pair<int,deque<int>> ToInsert_back;
        while(!ToInsert.empty()){
            ToInsert_back = ToInsert.back(); ToInsert.pop_back();
            if(!PossibleNumbers[ToInsert_back.first].first)
                PossibleNumbers[ToInsert_back.first] = pair<bool,deque<int>>(true, ToInsert_back.second);
        }

//        cout << "PossibleNumbers (before purge):" << endl;
//        for(const auto& n:PossibleNumbers){
//            cout << n.first << ": ";
//            for(const auto& m:n.second) cout << m << " ";
//            cout << endl;
//        }

//        while(!PossibleNumbers.empty() && PossibleNumbers.begin()->first < LowerBound_i)
//            PossibleNumbers.erase(PossibleNumbers.begin());

//        cout << "PossibleNumbers (after purge):" << endl;
//        for(const auto& n:PossibleNumbers){
//            cout << n.first << ": ";
//            for(const auto& m:n.second) cout << m << " ";
//            cout << endl;
//        }cout << endl;

//        for(int j = 0; j < PossibleNumbers.size(); ++j){
//            const auto& n = PossibleNumbers[j];
//            cout << "j=" << j << " " << (n.first? "TRUE" : "FALSE") << "    ";
//            if(n.first) for(const auto& m:n.second) cout << m << " ";
//            cout << endl;
//        }cout << endl;

    }


    for(int i = l; i <= u; ++i){
        const auto& n = PossibleNumbers[i];
        if(n.first)
            return vector<int>(n.second.begin(), n.second.end());
    }

    return vector<int>(0);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB OK (n = 1, answer = NO)
2 Correct 3 ms 380 KB OK (n = 1, answer = NO)
3 Correct 2 ms 428 KB OK (n = 1, answer = YES)
4 Correct 3 ms 480 KB OK (n = 2, answer = YES)
5 Correct 3 ms 488 KB OK (n = 2, answer = YES)
6 Correct 2 ms 544 KB OK (n = 3, answer = YES)
7 Correct 3 ms 544 KB OK (n = 3, answer = YES)
8 Correct 3 ms 616 KB OK (n = 3, answer = YES)
9 Correct 3 ms 616 KB OK (n = 3, answer = YES)
10 Correct 3 ms 616 KB OK (n = 3, answer = YES)
11 Correct 2 ms 616 KB OK (n = 3, answer = YES)
12 Correct 2 ms 616 KB OK (n = 3, answer = YES)
13 Correct 2 ms 616 KB OK (n = 3, answer = NO)
14 Correct 2 ms 616 KB OK (n = 3, answer = YES)
15 Correct 2 ms 616 KB OK (n = 3, answer = YES)
16 Correct 2 ms 616 KB OK (n = 3, answer = NO)
17 Correct 3 ms 616 KB OK (n = 3, answer = NO)
18 Correct 5 ms 1276 KB OK (n = 100, answer = NO)
19 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
2 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
3 Correct 4 ms 1276 KB OK (n = 12, answer = NO)
4 Correct 3 ms 1276 KB OK (n = 12, answer = NO)
5 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
6 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
7 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
8 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
9 Correct 2 ms 1276 KB OK (n = 6, answer = YES)
10 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
11 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
12 Correct 3 ms 1276 KB OK (n = 100, answer = YES)
13 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
14 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
15 Correct 8 ms 1404 KB OK (n = 100, answer = YES)
16 Correct 7 ms 1404 KB OK (n = 100, answer = YES)
17 Correct 6 ms 1404 KB OK (n = 100, answer = YES)
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB OK (n = 1, answer = NO)
2 Correct 3 ms 380 KB OK (n = 1, answer = NO)
3 Correct 2 ms 428 KB OK (n = 1, answer = YES)
4 Correct 3 ms 480 KB OK (n = 2, answer = YES)
5 Correct 3 ms 488 KB OK (n = 2, answer = YES)
6 Correct 2 ms 544 KB OK (n = 3, answer = YES)
7 Correct 3 ms 544 KB OK (n = 3, answer = YES)
8 Correct 3 ms 616 KB OK (n = 3, answer = YES)
9 Correct 3 ms 616 KB OK (n = 3, answer = YES)
10 Correct 3 ms 616 KB OK (n = 3, answer = YES)
11 Correct 2 ms 616 KB OK (n = 3, answer = YES)
12 Correct 2 ms 616 KB OK (n = 3, answer = YES)
13 Correct 2 ms 616 KB OK (n = 3, answer = NO)
14 Correct 2 ms 616 KB OK (n = 3, answer = YES)
15 Correct 2 ms 616 KB OK (n = 3, answer = YES)
16 Correct 2 ms 616 KB OK (n = 3, answer = NO)
17 Correct 3 ms 616 KB OK (n = 3, answer = NO)
18 Correct 5 ms 1276 KB OK (n = 100, answer = NO)
19 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
20 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
21 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
22 Correct 4 ms 1276 KB OK (n = 12, answer = NO)
23 Correct 3 ms 1276 KB OK (n = 12, answer = NO)
24 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
25 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
26 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
27 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
28 Correct 2 ms 1276 KB OK (n = 6, answer = YES)
29 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
30 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
31 Correct 3 ms 1276 KB OK (n = 100, answer = YES)
32 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
33 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
34 Correct 8 ms 1404 KB OK (n = 100, answer = YES)
35 Correct 7 ms 1404 KB OK (n = 100, answer = YES)
36 Correct 6 ms 1404 KB OK (n = 100, answer = YES)
37 Correct 4 ms 1404 KB OK (n = 28, answer = YES)
38 Correct 5 ms 1404 KB OK (n = 27, answer = YES)
39 Correct 7 ms 1404 KB OK (n = 90, answer = YES)
40 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
41 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
42 Correct 2 ms 1404 KB OK (n = 10, answer = YES)
43 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
44 Correct 17 ms 1532 KB OK (n = 100, answer = YES)
45 Correct 5 ms 1532 KB OK (n = 100, answer = YES)
46 Correct 7 ms 1532 KB OK (n = 100, answer = YES)
47 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
48 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
49 Correct 5 ms 1532 KB OK (n = 100, answer = NO)
50 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
51 Correct 19 ms 1828 KB OK (n = 100, answer = YES)
52 Correct 12 ms 1828 KB OK (n = 100, answer = YES)
53 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
54 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB OK (n = 1, answer = NO)
2 Correct 3 ms 380 KB OK (n = 1, answer = NO)
3 Correct 2 ms 428 KB OK (n = 1, answer = YES)
4 Correct 3 ms 480 KB OK (n = 2, answer = YES)
5 Correct 3 ms 488 KB OK (n = 2, answer = YES)
6 Correct 2 ms 544 KB OK (n = 3, answer = YES)
7 Correct 3 ms 544 KB OK (n = 3, answer = YES)
8 Correct 3 ms 616 KB OK (n = 3, answer = YES)
9 Correct 3 ms 616 KB OK (n = 3, answer = YES)
10 Correct 3 ms 616 KB OK (n = 3, answer = YES)
11 Correct 2 ms 616 KB OK (n = 3, answer = YES)
12 Correct 2 ms 616 KB OK (n = 3, answer = YES)
13 Correct 2 ms 616 KB OK (n = 3, answer = NO)
14 Correct 2 ms 616 KB OK (n = 3, answer = YES)
15 Correct 2 ms 616 KB OK (n = 3, answer = YES)
16 Correct 2 ms 616 KB OK (n = 3, answer = NO)
17 Correct 3 ms 616 KB OK (n = 3, answer = NO)
18 Correct 5 ms 1276 KB OK (n = 100, answer = NO)
19 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
20 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
21 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
22 Correct 4 ms 1276 KB OK (n = 12, answer = NO)
23 Correct 3 ms 1276 KB OK (n = 12, answer = NO)
24 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
25 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
26 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
27 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
28 Correct 2 ms 1276 KB OK (n = 6, answer = YES)
29 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
30 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
31 Correct 3 ms 1276 KB OK (n = 100, answer = YES)
32 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
33 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
34 Correct 8 ms 1404 KB OK (n = 100, answer = YES)
35 Correct 7 ms 1404 KB OK (n = 100, answer = YES)
36 Correct 6 ms 1404 KB OK (n = 100, answer = YES)
37 Correct 4 ms 1404 KB OK (n = 28, answer = YES)
38 Correct 5 ms 1404 KB OK (n = 27, answer = YES)
39 Correct 7 ms 1404 KB OK (n = 90, answer = YES)
40 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
41 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
42 Correct 2 ms 1404 KB OK (n = 10, answer = YES)
43 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
44 Correct 17 ms 1532 KB OK (n = 100, answer = YES)
45 Correct 5 ms 1532 KB OK (n = 100, answer = YES)
46 Correct 7 ms 1532 KB OK (n = 100, answer = YES)
47 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
48 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
49 Correct 5 ms 1532 KB OK (n = 100, answer = NO)
50 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
51 Correct 19 ms 1828 KB OK (n = 100, answer = YES)
52 Correct 12 ms 1828 KB OK (n = 100, answer = YES)
53 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
54 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
55 Execution timed out 1082 ms 29884 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB OK (n = 1, answer = NO)
2 Correct 3 ms 380 KB OK (n = 1, answer = NO)
3 Correct 2 ms 428 KB OK (n = 1, answer = YES)
4 Correct 3 ms 480 KB OK (n = 2, answer = YES)
5 Correct 3 ms 488 KB OK (n = 2, answer = YES)
6 Correct 2 ms 544 KB OK (n = 3, answer = YES)
7 Correct 3 ms 544 KB OK (n = 3, answer = YES)
8 Correct 3 ms 616 KB OK (n = 3, answer = YES)
9 Correct 3 ms 616 KB OK (n = 3, answer = YES)
10 Correct 3 ms 616 KB OK (n = 3, answer = YES)
11 Correct 2 ms 616 KB OK (n = 3, answer = YES)
12 Correct 2 ms 616 KB OK (n = 3, answer = YES)
13 Correct 2 ms 616 KB OK (n = 3, answer = NO)
14 Correct 2 ms 616 KB OK (n = 3, answer = YES)
15 Correct 2 ms 616 KB OK (n = 3, answer = YES)
16 Correct 2 ms 616 KB OK (n = 3, answer = NO)
17 Correct 3 ms 616 KB OK (n = 3, answer = NO)
18 Correct 5 ms 1276 KB OK (n = 100, answer = NO)
19 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
20 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
21 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
22 Correct 4 ms 1276 KB OK (n = 12, answer = NO)
23 Correct 3 ms 1276 KB OK (n = 12, answer = NO)
24 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
25 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
26 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
27 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
28 Correct 2 ms 1276 KB OK (n = 6, answer = YES)
29 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
30 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
31 Correct 3 ms 1276 KB OK (n = 100, answer = YES)
32 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
33 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
34 Correct 8 ms 1404 KB OK (n = 100, answer = YES)
35 Correct 7 ms 1404 KB OK (n = 100, answer = YES)
36 Correct 6 ms 1404 KB OK (n = 100, answer = YES)
37 Correct 4 ms 1404 KB OK (n = 28, answer = YES)
38 Correct 5 ms 1404 KB OK (n = 27, answer = YES)
39 Correct 7 ms 1404 KB OK (n = 90, answer = YES)
40 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
41 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
42 Correct 2 ms 1404 KB OK (n = 10, answer = YES)
43 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
44 Correct 17 ms 1532 KB OK (n = 100, answer = YES)
45 Correct 5 ms 1532 KB OK (n = 100, answer = YES)
46 Correct 7 ms 1532 KB OK (n = 100, answer = YES)
47 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
48 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
49 Correct 5 ms 1532 KB OK (n = 100, answer = NO)
50 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
51 Correct 19 ms 1828 KB OK (n = 100, answer = YES)
52 Correct 12 ms 1828 KB OK (n = 100, answer = YES)
53 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
54 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
55 Execution timed out 1082 ms 29884 KB Time limit exceeded
56 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 380 KB OK (n = 1, answer = NO)
2 Correct 3 ms 380 KB OK (n = 1, answer = NO)
3 Correct 2 ms 428 KB OK (n = 1, answer = YES)
4 Correct 3 ms 480 KB OK (n = 2, answer = YES)
5 Correct 3 ms 488 KB OK (n = 2, answer = YES)
6 Correct 2 ms 544 KB OK (n = 3, answer = YES)
7 Correct 3 ms 544 KB OK (n = 3, answer = YES)
8 Correct 3 ms 616 KB OK (n = 3, answer = YES)
9 Correct 3 ms 616 KB OK (n = 3, answer = YES)
10 Correct 3 ms 616 KB OK (n = 3, answer = YES)
11 Correct 2 ms 616 KB OK (n = 3, answer = YES)
12 Correct 2 ms 616 KB OK (n = 3, answer = YES)
13 Correct 2 ms 616 KB OK (n = 3, answer = NO)
14 Correct 2 ms 616 KB OK (n = 3, answer = YES)
15 Correct 2 ms 616 KB OK (n = 3, answer = YES)
16 Correct 2 ms 616 KB OK (n = 3, answer = NO)
17 Correct 3 ms 616 KB OK (n = 3, answer = NO)
18 Correct 5 ms 1276 KB OK (n = 100, answer = NO)
19 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
20 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
21 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
22 Correct 4 ms 1276 KB OK (n = 12, answer = NO)
23 Correct 3 ms 1276 KB OK (n = 12, answer = NO)
24 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
25 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
26 Correct 3 ms 1276 KB OK (n = 12, answer = YES)
27 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
28 Correct 2 ms 1276 KB OK (n = 6, answer = YES)
29 Correct 2 ms 1276 KB OK (n = 12, answer = YES)
30 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
31 Correct 3 ms 1276 KB OK (n = 100, answer = YES)
32 Correct 3 ms 1276 KB OK (n = 100, answer = NO)
33 Correct 4 ms 1276 KB OK (n = 100, answer = YES)
34 Correct 8 ms 1404 KB OK (n = 100, answer = YES)
35 Correct 7 ms 1404 KB OK (n = 100, answer = YES)
36 Correct 6 ms 1404 KB OK (n = 100, answer = YES)
37 Correct 4 ms 1404 KB OK (n = 28, answer = YES)
38 Correct 5 ms 1404 KB OK (n = 27, answer = YES)
39 Correct 7 ms 1404 KB OK (n = 90, answer = YES)
40 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
41 Correct 3 ms 1404 KB OK (n = 100, answer = YES)
42 Correct 2 ms 1404 KB OK (n = 10, answer = YES)
43 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
44 Correct 17 ms 1532 KB OK (n = 100, answer = YES)
45 Correct 5 ms 1532 KB OK (n = 100, answer = YES)
46 Correct 7 ms 1532 KB OK (n = 100, answer = YES)
47 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
48 Correct 3 ms 1532 KB OK (n = 100, answer = NO)
49 Correct 5 ms 1532 KB OK (n = 100, answer = NO)
50 Correct 13 ms 1532 KB OK (n = 100, answer = YES)
51 Correct 19 ms 1828 KB OK (n = 100, answer = YES)
52 Correct 12 ms 1828 KB OK (n = 100, answer = YES)
53 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
54 Correct 3 ms 1828 KB OK (n = 100, answer = YES)
55 Execution timed out 1082 ms 29884 KB Time limit exceeded
56 Halted 0 ms 0 KB -