제출 #642189

#제출 시각아이디문제언어결과실행 시간메모리
642189birthdaycake죄수들의 도전 (IOI22_prison)C++17
0 / 100
0 ms212 KiB
#include "prison.h"

#include<bits/stdc++.h>
#define endl '\n'
#define mod 1000000007
using namespace std;
 
// odd has , even doesnt
 
// 0 check a
// 1 , 2 check b for 0
vector<vector<int>> devise_strategy(int N) {
    vector<vector<int>>ans;
    vector<int>d;
    d.push_back(0);
    for(int i = 1; i <= N; i++) {
        if(i == 1){
            d.push_back(-1);
            continue;
        }
        else if(i == N){
            d.push_back(-2);
            continue;
        }
        if(i & (1 << (12))) d.push_back(1);
        else d.push_back(2);
    }
    
    ans.push_back(d);
    d.clear();
    bool turn = 0; int cnt = 12;
    for(int j = 1; cnt > 0 || turn == 0; j+=2){
        if(turn){
            // check a
            cnt--;
            d.push_back(0);
            for(int i = 1; i <= N; i++){
                if(i == 1) d.push_back(-1);
                else if(i == N) d.push_back(-2);
                else if(i & ((1 << cnt))) {
                    d.push_back(j + 2);
                }
                else {
                    d.push_back(j + 3);
                }
            }
            ans.push_back(d);
            d.clear();
            d.push_back(0);
            for(int i = 1; i <= N; i++){
                if(i == 1) d.push_back(-1);
                else if(i == N) d.push_back(-2);
                else if(i & ((1 << cnt))){
                    d.push_back(j + 2);
                }
                else {
                    d.push_back(j + 3);
                }
            }
            ans.push_back(d);
            d.clear();
            
        }else{
            d.push_back(1);
            for(int i = 1; i <= N; i++){
                if(i == 1) d.push_back(-2);
                else if(i == N) d.push_back(-1);
                else if(i & ((1 << cnt))) d.push_back(j + 2);
                else d.push_back(-2);
            }
            ans.push_back(d);
            d.clear();
            d.push_back(1);
            for(int i = 1; i <= N; i++){
                if(i == 1) d.push_back(-2);
                else if(i == N) d.push_back(-1);
                else if(i & ((1 << cnt))) d.push_back(-1);
                else d.push_back(j + 3);
            }
            ans.push_back(d);
            d.clear();
            
        }
        
        turn = !turn;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...