Submission #302923

# Submission time Handle Problem Language Result Execution time Memory
302923 2020-09-19T12:27:35 Z mohamedsobhi777 Cave (IOI13_cave) C++14
0 / 100
5 ms 896 KB
#include "cave.h"
#include <vector>
#include<bits/stdc++.h>
 
using namespace std ; 
 
int n ; 
int *pos, *loc, *tmp ;  
bool vis[10000] ; 
int it, col ;
void flip(){
        for(int i = 0 ;i < n ;i++)
                pos[i]^=1 ; 
}
 
vector<int> btns ; 
 
void init(int N){
        n = N ; 
        pos = new int[N] ;
        loc = new int[N] ; 
        tmp = new int[N] ; 
        memset(pos , 0 , sizeof(int) * N) ; 
        memset(loc , 0 , sizeof(int) * N) ;
        memset(tmp , 0 , sizeof(int) * N) ;
        for(int i = 0 ;i < N ;i++)
                btns.push_back(i) ;
}
 
 
int go(vector<int> vec, int door){
        int ret = n ; 
        int *qu = pos ; 
        for(auto u : vec)
                qu[u] = 0 ;
        ret = tryCombination(qu) ;
        int *q1 , *q2 ; 
        q1 = new int(sizeof(int) * n) ; 
        q2 = new int(sizeof(int) * n) ; 
 
        for(int i = 0 ;i < n;i++)
                q1[i] = qu[i] ; 
        for(auto u : vec)
                qu[u] = 1 ;
        int ret2 = tryCombination(qu) ; 
        for(int i = 0 ;i < n;i++)
                q2[i] = qu[i] ; 
        if(ret > ret2){
                swap(q1 , q2) ; 
                swap(ret , ret2) ; 
        }
        bool ok = (ret2 > door && ret ==  door) || (ret == -1 && ret2 == door) ;
        if(ok){
                col = 0 ; 
                if(ret != door){
                        for(int i = 0 ;i < n;i++)
                                tmp[i] = q1[i] ; 
                }
                else if(ret2!= door) {
                        for(int i = 0 ;i < n; i++ )
                                tmp[i] = q2[i] ; 
                }
        }
        else
                col = 2 ; 
        return ok; 
}
 
void solve( vector<int> swi , int door){
        if(swi . size() == 1){
                if(col == 2 ){
                        col = 0 ; 
                        pos[swi[0]] = 0 ; 
                        if(tryCombination(pos) == door){
                                col^=1 ; 
                        }
                        pos[swi[0]] = col ; 
                }
                else{
                        pos[swi[0]] = tmp[swi[0]] ; 
                }
 
                loc[ swi[0] ] = it ; 
                for(int i = 0 ;i < (int) btns.size() ; ++ i){
                        if(btns[i] == swi[0]){
                                btns.erase(btns.begin() + i) ;
                                break ; 
                        }
                }
                it++ ;
                col = 2 ; 
                return ; 
        }
        vector<int> LHS , RHS ; 
        int sz = (int) swi.size() ; 
        for(int i = 0 ;i < sz ;i ++){
                if(i < sz / 2)
                        LHS.push_back(swi[i]) ; 
                else
                        RHS.push_back(swi[i]) ; 
        }
        col = 2; 
        if(go(LHS, door)){
                solve(LHS, door) ; 
        }else{
                solve(RHS, door) ; 
        }
 
}
 
void exploreCave(int N) {
        init(N); 
        for(int i = 0 ;i < n;i++){
                col = 2; 
                solve(btns , i) ;         
        }
 
        answer(pos , loc) ; 
}
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 768 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 896 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Runtime error 4 ms 640 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 384 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 384 KB Output is correct
4 Correct 0 ms 384 KB Output is correct
5 Runtime error 4 ms 640 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 768 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -