제출 #919461

#제출 시각아이디문제언어결과실행 시간메모리
919461Gwynbleidd_동굴 (IOI13_cave)C++14
100 / 100
391 ms848 KiB
#include "cave.h"

#include <bits/stdc++.h>

using namespace std;

int n;
vector<int> a, flip, pos;

int comb(){
    int q[n];
    for(int i=0;i<n;i++) q[i]=a[i];
    return tryCombination(q);
}

void answer(){
    int f[n], p[n];
    for(int i=0;i<n;i++) f[i]=flip[i], p[i]=pos[i];
    answer(f,p);
}

void exploreCave(int N) {
    n=N;
    flip.assign(n,-1);
    pos.assign(n,-1);
    a.assign(n,0);
    for(int t=0;t<n;t++){
        vector<int> ind;       
        for(int i=0;i<n;i++){
            if(flip[i]==-1){
                ind.push_back(i);
            }
            else{
                a[i]=flip[i];
            }
        }
        if(!ind.size()){
            break;
        }
        int last=comb();
        while(ind.size()>1){
            vector<int> l,r;
            for(int i=0;i<ind.size();i++){
                if(i<ind.size()/2){
                    l.push_back(ind[i]);
                }
                else{
                    r.push_back(ind[i]);
                }
            }
            for(auto &x:l){
                a[x]=1-a[x];
            }
            int x=comb();
            if(last==-1){
                swap(ind,l);
                last=x;
            }
            else if(last==x){
                swap(ind,r);
            }
            else if(x==-1||x>last){
                for(auto &x:l){
                    a[x]=1-a[x];
                }
                swap(ind,l);
            }
            else{
                swap(ind,l);
                last=x;
            }
        }
        if(last==-1){
            flip[ind[0]]=a[ind[0]];
            a[ind[0]]=1-a[ind[0]];
            pos[ind[0]]=comb();
        }
        else{
            flip[ind[0]]=1-a[ind[0]];
            pos[ind[0]]=last;
        }
    }
    answer();
}

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

cave.cpp: In function 'void exploreCave(int)':
cave.cpp:43:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |             for(int i=0;i<ind.size();i++){
      |                         ~^~~~~~~~~~~
cave.cpp:44:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |                 if(i<ind.size()/2){
      |                    ~^~~~~~~~~~~~~
#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...