제출 #435684

#제출 시각아이디문제언어결과실행 시간메모리
435684Odavey동굴 (IOI13_cave)C++14
컴파일 에러
0 ms0 KiB
//
// ~oisín~ C++ Template
//

#include                <bits/stdc++.h>
#define MX_N            5001
#define mp              make_pair
#define mod7            1000000007
#define modpi           314159
#define PI              3.141592653589793238
#define pb              push_back
#define FastIO          ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define All(a)          a.begin(),a.end()
#define fi              first
#define se              second
#define ll              long long int
#define ull             unsigned long long int

int kx[8]  =            {+2, +2, -2, -2, +1, +1, -1, -1};
int ky[8]  =            {+1, -1, +1, -1, +2, -2, +2, -2};
int d9x[9] =            {+1, +1, +1, +0, +0, +0, -1, -1, -1};
int d9y[9] =            {+1, +0, -1, +1, +0, -1, +1, +0, -1};
int dx4[4] =            {+0, +0, +1, -1};
int dy4[4] =            {+1, -1, +0, +0};

ll gcd(ull a, ull b){
    return (a==0)?b:gcd(b%a,a);
}

ll lcm(ull a, ull b){
    return a*(b/gcd(a,b));
}

const long long INF = 1e18;

using namespace std;

//int p[MX_N];
//int o[MX_N];

int tryCombination(int S[]);

//int tryCombination(vector<int> S){
//    int n = S.size();
//    cout << "Trying this combination\n";
//    for(int i=0;i<n;++i){
//        cout << S[i] << ' ';
//    }
//    cout << endl;
//    bool door[n];
//    for(int i=0;i<n;++i){
//        door[p[i]] = (S[i] == o[p[i]]);
//    }
//    for(int i=0;i<n;++i){
//        if(!door[i]){
//            cout << "It reaches all the way up to door " << i << "!\n";
//            return i;
//        }
//    }
//    cout << "It reaches all the way through!\n";
//    return -1;
//}

void answer (int S[], int D[]);

//void answer (vector<int> S, vector<int> D){
//    int n = S.size();
//    for(int i=0;i<n;++i){
//        cout << S[i] << " & " << D[i] << endl;
//    }
//    for(int i=0;i<n;++i){
//        if(!(S[i] == o[D[i]] && D[i] == p[i])){
//            cout << "WA\n";
//            return;
//        }
//    }
//    cout << "AC\n";
//    return;
//}

void exploreCave(int N){
    map<int, int> k;//lever i -> door j
    set<int> dk;//lever i
    int pos[N];//correct orientation of lever i
    memset(pos, -1, sizeof(pos));
    for(int i=0;i<N;++i){
        dk.insert(i);
    }
    for(int root=0;root<N;++root){
        int S[N];
        //vector<int> S(N);
        for(int x : dk){
            S[x] = 1;
        }
        for(auto it=k.begin();it!=k.end();++it){
            S[it->first] = pos[it->first];
        }
        int res = tryCombination(S);
        bool O = (res > root || res == -1);
        int lo=0, hi=(int)dk.size()-1;
        while(lo < hi){
            int mid = (lo+hi) >> 1;
            int cnt = 0;
            for(int x : dk){
                if(cnt <= mid){
                    S[x] = O;
                }else{
                    S[x] = !O;
                }
                ++cnt;
            }
            res = tryCombination(S);
            if(res > root || res == -1){
                hi = mid;
            }else{
                lo = mid+1;
            }
        }
        int cnt = 0;
        for(int x : dk){
            if(cnt == lo){
                k[x] = root;
                pos[x] = O;
                dk.erase(x);
//                cout << "Filled in the door at " << root << ", the switch is " << x << " and the orientation is " << O << endl;
                break;
            }
            ++cnt;
        }
    }
//    vector<int> S(N), D(N);
    int S[N];
    int D[N];
    for(int i=0;i<N;++i){
        S[i] = pos[i];
        D[i] = k[i];
    }
    answer(S, D);
    return;
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/cceloQQZ.o: in function `exploreCave(int)':
cave.cpp:(.text+0x75d): undefined reference to `tryCombination(int*)'
/usr/bin/ld: cave.cpp:(.text+0x7fb): undefined reference to `tryCombination(int*)'
/usr/bin/ld: cave.cpp:(.text+0xbc9): undefined reference to `answer(int*, int*)'
/usr/bin/ld: /tmp/cctSMyvZ.o: in function `main':
grader.c:(.text.startup+0x10): undefined reference to `exploreCave'
collect2: error: ld returned 1 exit status