Submission #1269591

#TimeUsernameProblemLanguageResultExecution timeMemory
1269591nerrrminLast supper (IOI12_supper)C++20
100 / 100
71 ms10568 KiB
#include "advisor.h" #include<bits/stdc++.h> #define pb push_back using namespace std; const int maxn = 2e5 + 10, maxk = 25005; int n, k, m; vector < int > uses[maxn]; vector < int > del[maxn]; int nxt[maxn]; int on_pos[maxn]; int res[maxn], appear[maxn]; void ComputeAdvice(int *C, int N, int K, int M) { n = N; k = K; m = M; for (int i = 0; i < n; ++ i) { res[i] = 0; uses[i].pb(1e9); nxt[i] = 1e9; } for (int i = n-1; i >= 0; -- i) { uses[C[i]].pb(i); nxt[C[i]] = i; } set < pair < int, int > > s; for (int i = 0; i < n; ++ i) on_pos[i] = -1; for (int i = 0; i < k; ++ i) { s.insert(make_pair(nxt[i], i)); on_pos[i] = i; appear[i] = i; } int respos = k; for (int i = 0; i < n; ++ i) { //cout << "i = " << i << endl; respos = i + k; if(on_pos[C[i]] != -1) { appear[C[i]] = respos; uses[C[i]].pop_back(); s.erase(make_pair(nxt[C[i]], C[i])); nxt[C[i]] = uses[C[i]].back(); s.insert(make_pair(nxt[C[i]], C[i])); continue; } pair < int, int > worst = *s.rbegin(); // cout << worst.first << " " << worst.second << endl; //cout << "here " << endl; int t = worst.second; // cout << t << endl; int pos = on_pos[t]; // cout << pos << endl; on_pos[t] = -1; on_pos[C[i]] = pos; res[appear[t]] = 1; appear[C[i]] = respos; // cout << pos << endl; uses[C[i]].pop_back(); nxt[C[i]] = uses[C[i]].back(); s.erase(s.find(worst)); s.insert(make_pair(nxt[C[i]], C[i])); } for (int i = 0; i < n + k; ++ i) WriteAdvice(res[i]); return; }
#include "assistant.h" #include <bits/stdc++.h> #define pb push_back using namespace std; int taken[200000], active[200000]; void Assist(unsigned char *A, int N, int K, int R) { //cout << "assist " << endl; //cout << R << endl; for (int i = 0; i < R; ++ i) { // cout << "i = " << A[i] << endl; } // cout << endl; int n, k; n = N; k = K; int lg = 0, stepen = 1; while(stepen*2 <= k) { stepen *= 2; lg ++; } for (int i = 0; i < n; ++ i) { active[i] = 0; } for (int i = 0; i < k; ++ i) { taken[i] = i; active[i] = 1; } int i; int j = 0; vector < int > inactive; for (int i = 0; i < k; ++ i) { if(A[i])inactive.pb(i); } for (i = 0; i < n; i++) { j = i + k; int req = GetRequest(); if (active[req]) { if(A[j])inactive.pb(req); continue; } int up = inactive.back(); inactive.pop_back(); active[up] = 0; PutBack(up); active[req] = 1; if(A[j])inactive.pb(req); } return; }
#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...