Submission #825217

#TimeUsernameProblemLanguageResultExecution timeMemory
825217vjudge1Library (JOI18_library)C++17
100 / 100
255 ms412 KiB
#include "library.h"
 /// 123
#include <bits/stdc++.h>
 
#include <cstdio>
#include <vector>
using namespace std;
 
void Solve(int N) {
        if (N == 1) return void(Answer({1}));
        vector<int> ask(N, 1);
        int start = -1;
        for (int i = 0; i < N; i++) {
                ask[i] = 0;
                if (Query(ask) == 1) {
                        start = i;
                }
                ask[i] = 1;
        }
        assert(start != -1);
        vector<int> res(1, start + 1);
        vector<int> rem(N);
        iota(rem.begin(), rem.end(), 1);
        while (true) {
                for (int i = 0; i < rem.size(); i++) {
                        if (rem[i] == res.back()) {
                                swap(rem[i], rem.back());
                                rem.pop_back();
                                break;
                        }
                }
                if (rem.size() == 1) {
                        res.emplace_back(rem[0]);
                        return void(Answer(res));
                }
                int l = 1, r = rem.size(), nxt = -1;
                while (l <= r) {
                        int mid = l + r >> 1;
                        ask = vector<int>(N, 0);
                        for (int i = 0; i < mid; i++) ask[rem[i] - 1] = 1;
                        for (int i : res) ask[i - 1] = 1;
                        int x = Query(ask);
                        for (int i : res) ask[i - 1] = 0;
                        int y = count(ask.begin(), ask.end(), 1) ? Query(ask) : 0;
                        if (x == y) {
                                nxt = mid;
                                r = mid - 1;
                        } else {
                                l = mid + 1;
                        }
                }
                res.emplace_back(rem[nxt - 1]);
        }
}

Compilation message (stderr)

library.cpp: In function 'void Solve(int)':
library.cpp:25:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |                 for (int i = 0; i < rem.size(); i++) {
      |                                 ~~^~~~~~~~~~~~
library.cpp:38:37: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   38 |                         int mid = l + r >> 1;
      |                                   ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...