제출 #556256

#제출 시각아이디문제언어결과실행 시간메모리
556256Zanite동굴 (IOI13_cave)C++17
51 / 100
408 ms468 KiB
#include "cave.h"

#include <bits/stdc++.h>
using namespace std;

void exploreCave(int N) {
    int toggle[N], correspondence[N];
    bool answered[N];

    memset(toggle, 0, sizeof(toggle));
    memset(correspondence, 0, sizeof(correspondence));
    memset(answered, 0, sizeof(answered));

    for (int i = 0; i < N; i++) {
        // check the correct position of the switch that handles the i-th door
        int correctPos = 0;
        for (int s = 0; s < N; s++) {
            if (!answered[s]) {toggle[s] = 0;}
        }
        if (tryCombination(toggle) == i) {
            for (int s = 0; s < N; s++) {
                if (!answered[s]) {toggle[s] = 1;}
            }
            correctPos = 1;
        }
        
        // search which switch connects to the i-th door
        deque<int> guesses;
        for (int s = 0; s < N; s++) {
            if (!answered[s]) {guesses.push_back(s);}
        }
        while (__builtin_popcount(guesses.size()) != 1) {
            guesses.push_back(guesses.back());
        }
        while (guesses.size() > 1) {
            // guess the left half of deque
            bool removeLeft = 0;
            for (int g = 0; g < (guesses.size() >> 1); g++) {
                toggle[guesses[g]] = 1 - correctPos;
            }
            if (tryCombination(toggle) != i) {
                removeLeft = 1;
            }
            for (int g = 0; g < (guesses.size() >> 1); g++) {
                toggle[guesses[g]] = correctPos;
            }

            if (removeLeft) {
                for (int g = 0; g < (guesses.size() >> 1); g++) {
                    guesses.pop_front();
                }   
            } else {
                for (int g = (guesses.size() >> 1); g < guesses.size(); g++) {
                    guesses.pop_back();
                }
            }
        }
        correspondence[guesses[0]] = i;
        answered[guesses[0]] = 1;
    }

    answer(toggle, correspondence);
}

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

cave.cpp: In function 'void exploreCave(int)':
cave.cpp:38:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |             for (int g = 0; g < (guesses.size() >> 1); g++) {
      |                             ~~^~~~~~~~~~~~~~~~~~~~~~~
cave.cpp:44:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |             for (int g = 0; g < (guesses.size() >> 1); g++) {
      |                             ~~^~~~~~~~~~~~~~~~~~~~~~~
cave.cpp:49:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |                 for (int g = 0; g < (guesses.size() >> 1); g++) {
      |                                 ~~^~~~~~~~~~~~~~~~~~~~~~~
cave.cpp:53:55: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |                 for (int g = (guesses.size() >> 1); g < guesses.size(); g++) {
      |                                                     ~~^~~~~~~~~~~~~~~~
#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...