제출 #1330223

#제출 시각아이디문제언어결과실행 시간메모리
1330223iamsazidh동굴 (IOI13_cave)C++20
100 / 100
215 ms596 KiB
#include "cave.h"
//ᴇᴀᴄʜ ᴘᴇʀꜱᴏɴ ᴡɪʟʟ ᴏɴʟʏ ʜᴀᴠᴇ ᴡʜᴀᴛ ᴛʜᴇʏ ᴇɴᴅᴇᴀᴠᴏᴜʀᴇᴅ ᴛᴏᴡᴀʀᴅꜱ [53:39]
//Author: Sazid Hasan
#include <bits/stdc++.h>
using namespace std;

typedef long long              ll;
typedef double                 dl;
typedef vector<int>            vi;
typedef vector<vector<int>>    vii;
typedef vector<ll>             vl;
typedef vector<bool>           vb;
typedef pair<int,int>         pii;
typedef pair<ll, ll>          pll;

#define ff                first
#define ss                second
#define all(a)            a.begin(),a.end()
#define gcd(a,b)          __gcd(a,b)
#define lcm(a,b)          (a*(b/gcd(a,b)))
#define spc               " "

#ifdef ONLINE_JUDGE
    #define debarr(array)
    #define deb(x)
    #define del
#else
    #define debarr(array)  for(int w = 0; w < array.size(); w++) cerr << #array << "-" << w << " = " << array[w] << endl;
    #define deb(x)         cerr << #x << " = " << x << endl;
    #define del cerr << '\n';
#endif


const double PI =         acos(-1);
const int MOD =           1000000007;
const int inf =           (2147483647);


bool isOpen(int *p, int &k){
    int a = tryCombination(p);
    if(a==-1 || a>k) return 1;
    return 0;
}

void exploreCave(int N) {
    int stat[N], door[N], frDoor[N];
    for(int i = 0; i < N; i++) stat[i] = -1;
    for(int i = 0; i < N; i++){
        vi c;
        for(int i = 0; i < N; i++){
            if(stat[i]==-1) c.push_back(i);
        }
        int p[N];
        for(int i = 0; i < N; i++){
            if(stat[i]==-1) p[i] = 0;
            else p[i] = stat[i];
        }
        if(isOpen(p, i)) frDoor[i] = 0;
        else frDoor[i] = 1;
        int st = 0, end = c.size()-1, mid;
        while(st<end){
            for(auto x: c) p[x] = frDoor[i]^1;
            mid = (st+end)>>1;
            for(int j = st; j <= mid; j++){
                p[c[j]] = frDoor[i];
            }
            if(isOpen(p, i)) end = mid;
            else st = mid+1;
        }
        door[c[st]] = i;
        stat[c[st]] = frDoor[i];
    }
    answer(stat, door);
    
}
#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...