Submission #226534

#TimeUsernameProblemLanguageResultExecution timeMemory
226534jiahngLost in the cycle (IOI19_cycle)C++17
100 / 100
5 ms512 KiB
#include <bits/stdc++.h> #include "cycle.h" using namespace std; typedef long long ll; typedef pair<ll,ll> pi; typedef vector <ll> vi; typedef vector <pi> vpi; #define f first #define s second #define FOR(i,s,e) for(ll i=s;i<=ll(e);++i) #define DEC(i,s,e) for(ll i=s;i>=ll(e);--i) #define pb push_back #define all(x) (x).begin(), (x).end() #define lbd(x, y) lower_bound(all(x), y) #define ubd(x, y) upper_bound(all(x), y) #define aFOR(i,x) for (auto i: x) #define mem(x,i) memset(x,i,sizeof x) #define fast ios_base::sync_with_stdio(false),cin.tie(0) int cur = 0; ll N; unordered_map <ll,bool> memo,vis; bool qry(ll a, bool jumping){ //set cur to a if (vis[a] && !jumping){ //cout<<a<<' '; return memo[a]; } bool res = jump((a - cur + (ll) 10 * N) % N); cur = a; vis[a] = 1; memo[a] = res; return res; } void check(ll x){ if (!qry(x+1,0)){ qry(x, 1); }else{ qry(x + N/2, 1); } } void escape(int n) { N = n; memo.clear(); vis.clear(); if (N == 2){ jump(1); return; } ll l = 0; ll r = N - 1; bool f = qry(0,0); while (l+1 < r){ //cout<<l<<' '<<r<<'\n'; ll mid = (l+r)/2; if (qry(mid,0) == f){ l = mid; continue; if (mid >= N/2) r = mid; else l = mid; }else{ r = mid; //f = !f; } } //cout<<l<<' '; if (!qry(l,0)){ if (qry(l+1,0)) l++; else l--; } //cout<<l<<' '; check(l); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...