Submission #395745

#TimeUsernameProblemLanguageResultExecution timeMemory
395745VictorLibrary (JOI18_library)C++17
100 / 100
384 ms700 KiB
#include "library.h" #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i = a; i < (b); ++i) #define per(i, a, b) for (int i = b - 1; i >= (a); --i) #define trav(a, x) for (auto& a : x) #define all(x) x.begin(), x.end() #define sz(x) x.size() #define pb push_back #define umap unordered_map #define uset unordered_set typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef vector<int> vi; typedef vector<ii> vii; typedef vector<vi> vvi; typedef long long ll; const int INF = 1000000007; vi dummy; int book = 0; uset<int> queried; int binsearch(vi books) { vi qvec = dummy; qvec[book] = 1; if (sz(books) == 1) { qvec[books[0]] = 1; if (Query(qvec) != 1) return -1; else return books[0]; } int take = sz(books) >> 1; rep(i, 0, take) qvec[books[i]] = 1; int moves = Query(qvec); qvec[book] = 0; vi nbooks; if (Query(qvec) < moves) rep(i, take, sz(books)) nbooks.push_back(books[i]); else rep(i, 0, take) nbooks.push_back(books[i]); return binsearch(nbooks); } void Solve(int n) { dummy.resize(n); vi ans(n); int rgt[n]; memset(rgt, -1, sizeof(rgt)); while (book != -1) { queried.insert(book); if(sz(queried)==n)break; vi vec; rep(i, 0, n) if (!queried.count(i)) vec.push_back(i); int next = binsearch(vec); rgt[book] = next; book = next; } book = 0; while (1) { queried.insert(book); if(sz(queried)==n)break; vi vec; rep(i, 0, n) if (!queried.count(i)) vec.push_back(i); int next = binsearch(vec); rgt[next] = book; book = next; } rep(i, 0, n) { ans[i] = book + 1; book = rgt[book]; } Answer(ans); }

Compilation message (stderr)

library.cpp: In function 'int binsearch(vi)':
library.cpp:7:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    7 | #define rep(i, a, b) for (int i = a; i < (b); ++i)
      |                                        ^
library.cpp:52:9: note: in expansion of macro 'rep'
   52 |         rep(i, take, sz(books)) nbooks.push_back(books[i]);
      |         ^~~
library.cpp: In function 'void Solve(int)':
library.cpp:68:23: warning: comparison of integer expressions of different signedness: 'std::unordered_set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   68 |         if(sz(queried)==n)break;
      |                       ^
library.cpp:81:23: warning: comparison of integer expressions of different signedness: 'std::unordered_set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   81 |         if(sz(queried)==n)break;
      |                       ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...