Submission #446053

#TimeUsernameProblemLanguageResultExecution timeMemory
446053flappybirdLibrary (JOI18_library)C++14
100 / 100
615 ms704 KiB
#include <bits/stdc++.h> #include <cassert> #include "library.h" using namespace std; typedef int ll; vector<ll> asdf; vector<ll> chk; vector<ll> p, e, memo; vector<ll> rs, s; ll n; void randp(ll N) { p.clear(); p.resize(N); ll i; for (i = 0; i < N; i++) p[i] = i + 1; for (i = N - 1; i >= 1; i--) { if ((rand() % (i + 1))) { ll a; a = rand() % i; swap(p[i], p[a]); } } } ll cnt = 0; ll query(vector<ll> v) { ll i; for (i = 0; i < v.size(); i++) v[i] = s[v[i]]; cnt++; vector<ll> a; a.resize(n); for (auto x : v) a[x - 1] = 1; return Query(a); } void Solve(int N) { n = N; s.resize(1); rs.resize(N + 1); randp(N); for (auto x : p) s.push_back(x); srand(time(NULL)); chk.resize(N + 1); ll i, a; for (i = 1; i <= N; i++) rs[s[i]] = i; ll sz = N; while (1) { asdf.clear(); for (ll i = 1; i <= N; i++) if (!chk[i]) asdf.push_back(i); sz = asdf.size(); if (!sz) break; if (asdf.size() <= 2) { e.push_back(asdf[0]); chk[asdf[0]] = 1; continue; } vector<ll> q1, q2; if (memo.empty()) { do { randp(sz); q1.clear(); q2.clear(); for (i = 0; i < sz; i++) { if (p[i] <= sz / 2) q1.push_back(asdf[i]); else q2.push_back(asdf[i]); } } while ((query(q1) + query(q2)) % 2); //memo = q2; } else { vector<ll> aasdf; aasdf.resize(N + 1); for (i = 1; i <= N; i++) aasdf[i] = chk[i]; for (auto x : memo) aasdf[x] = 1; q1 = memo; for (i = 1; i <= N; i++) if (!aasdf[i]) q2.push_back(i); memo.clear(); } ll l, r; l = 0, r = q1.size() - 1; vector<ll> v1, v2; while (l < r) { v1 = q1; v2 = q2; ll mid = (l + r) / 2; for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]); for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back(); if ((query(v1) + query(v2)) % 2) l = mid + 1; else r = mid; } e.push_back(q1[r]); chk[q1[r]] = 1; swap(q1, q2); l = 0, r = q1.size() - 1; v1.clear(); v2.clear(); while (l < r) { v1 = q1; v2 = q2; ll mid = (l + r) / 2; for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]); for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back(); if ((query(v1) + query(v2)) % 2) l = mid + 1; else r = mid; } e.push_back(q1[r]); chk[q1[r]] = 1; } deque<ll> d; for (i = N - 1; i >= 0; i--) { if (d.empty()) { d.push_back(e[i]); continue; } ll b = d.back(); vector<ll> v; v.push_back(b); v.push_back(e[i]); if (query(v) == 1) d.push_back(e[i]); else d.push_front(e[i]); } vector<ll> ans; while (!d.empty()) { ans.push_back(d.back()); d.pop_back(); } for (i = 0; i < N; i++) ans[i] = s[ans[i]]; Answer(ans); }

Compilation message (stderr)

library.cpp: In function 'll query(std::vector<int>)':
library.cpp:31:16: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |  for (i = 0; i < v.size(); i++) v[i] = s[v[i]];
      |              ~~^~~~~~~~~~
library.cpp: In function 'void Solve(int)':
library.cpp:89:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |    for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]);
      |                         ~~^~~~~~~~~~~
library.cpp:90:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |    for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back();
      |                         ~~^~~~~~~~~~~
library.cpp:105:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |    for (ll k = mid + 1; k < q1.size(); k++) v2.push_back(v1[k]);
      |                         ~~^~~~~~~~~~~
library.cpp:106:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'int'} and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |    for (ll k = mid + 1; k < q1.size(); k++) v1.pop_back();
      |                         ~~^~~~~~~~~~~
library.cpp:47:8: warning: unused variable 'a' [-Wunused-variable]
   47 |  ll i, a;
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...