제출 #1310771

#제출 시각아이디문제언어결과실행 시간메모리
1310771georgeckito동굴 (IOI13_cave)C++20
0 / 100
272 ms628 KiB
#include "cave.h"
#include <bits/stdc++.h>
using namespace std;
#define pb push_back

void exploreCave(int N){
    vector<int> S(N, -67);
    vector<int> d(N, -67);
    for(int i = 0; i < N; i++){
        vector<int> v;
        for(int i = 0; i < N; i++) if(S[i] < 0) v.pb(i);

        int fix[N];
        for(int i = 0; i < N; i++) {
            if(S[i] < 0) fix[i] == 0;
            else fix[i] = S[i];
        }

        int x = tryCombination(fix);
        if(v.size() == 1){
            if(x < 0 || x > i) S[v[0]] = 0;
            else S[v[0]] = 1;
            d[v[0]]=i;
            continue;
        }

        vector<int> vv = v;
        while(vv.size() > 1){
            int m = vv.size()/2;
            vector<int> l(vv.begin(), vv.begin()+m);
            vector<int> r(vv.begin()+m, vv.end());

            for(int i = 0; i < N; i++) {
                if(S[i] < 0) {
                    if(x < 0 || x > i) fix[i] = 1;
                    else fix[i] = 0;
                } else fix[i] = S[i];
            }

            for(int i : l) {
                if(x < 0 || x > i) fix[i] = 0;
                else fix[i] = 1;
            }

            int xx = tryCombination(fix);
            if(xx < 0 || xx > i) vv = l; 
            else vv = r;
        }

        int sw = vv[0];
        if(x < 0 || x > i) S[vv[0]] = 0;
        else S[vv[0]] = 1;
        d[sw]=i;
    }

    int SSS[N], DDD[N];
    for(int i = 0; i < N; i++) {
        SSS[i]=S[i]; DDD[i]=d[i]; 
    }

    answer(SSS, DDD);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...