제출 #349647

#제출 시각아이디문제언어결과실행 시간메모리
349647amunduzbaev최후의 만찬 (IOI12_supper)C++14
0 / 100
337 ms20916 KiB
#include <bits/stdc++.h> #ifndef EVAL #include "grader.cpp" #endif #include "advisor.h" #include "assistant.h" using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vll vector<ll> #define vii vector<int> #define vpii vector<pii> #define vpll vector<pll> #define cnt(a)__builtin_popcount(a) template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} const int NN = 1e6+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); int a[NN], used[NN], fir[NN]; void ComputeAdvice(int *c, int n, int k, int m){ memset(used, mod, sizeof used); memset(fir, mod, sizeof fir); for(int i=n-1;i>=0;i--){ a[i] = used[c[i]]; if(used[c[i]] == mod) fir[c[i]] = i; used[c[i]] = i; } memset(used, 0, sizeof used); set<pii> ss; for(int i=0;i<k;i++){ ss.insert({fir[i], i}); used[i] = 1; } string s; for(int i=0;i<n;i++){ //for(auto x:ss) cout<<x.ss<<" "; //cout<<"\n"; //for(int i=0;i<n;i++) cout<<used[i]<<" "; //cout<<"\n"; if(used[c[i]]) { s.pb(1); WriteAdvice(1); continue; } else { s.pb(0); WriteAdvice(0); } auto cur = --ss.end(); ss.erase(cur); int l = 0, r = k-1; int need = (*cur).ss, cnt = 0; //cout<<need<<"\n"; while(l < r){ cnt++; int m = (l + r +1)>>1; if(m >= need) { s.pb(0); WriteAdvice(0); l = m; } else { s.pb(1); WriteAdvice(1); r = m-1; } } used[need] = 0; used[c[i]] = 1; ss.insert({a[c[i]], c[i]}); } //for(int i=0;i<sz(s); i++) cout<<(int)s[i]<<" "; //cout<<"\n"; } /* 4 2 12 2 0 3 0 */
#include <bits/stdc++.h> #ifndef EVAL #include "grader.cpp" #endif #include "advisor.h" #include "assistant.h" using namespace std; #define ff first #define ss second #define pb push_back #define mp make_pair #define ub upper_bound #define lb lower_bound #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(),x.rend() #define fastios ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define vll vector<ll> #define vii vector<int> #define vpii vector<pii> #define vpll vector<pll> #define cnt(a)__builtin_popcount(a) template<class T> bool umin(T& a, const T& b) {return a > b? a = b, true:false;} template<class T> bool umax(T& a, const T& b) {return a < b? a = b, true:false;} const int NN = 1e6+5; const int mod = 1e9+7; const ll inf = 1e18; const ld Pi = acos(-1); void Assist(unsigned char *a, int n, int k, int r) { int last = 0; vector<int> cur; for(int i=0;i<k;i++) cur.pb(i); for(int i=0;i<n;i++){ int nw = GetRequest(); if(a[last]) { last++; continue; } last++; int l = 0, r = k-1; while(l < r){ int m = (l + r +1)>>1; if(a[last]) r = m-1; else l = m; last++; } PutBack(cur[l]); cur[l] = nw; } }
#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...