Submission #1278480

#TimeUsernameProblemLanguageResultExecution timeMemory
1278480AvianshLast supper (IOI12_supper)C++20
100 / 100
139 ms10376 KiB
#include <bits/stdc++.h> #include "advisor.h" using namespace std; void ComputeAdvice(int *c, int n, int k, int m) { vector<int>occ[n]; for(int i = 0;i<n;i++){ occ[i].push_back(-1); } for(int i = 0;i<n;i++){ occ[c[i]].push_back(i); } for(int i = 0;i<n;i++){ occ[i].push_back(1e9); } int rem[n]; fill(rem,rem+n,-1); set<array<int,2>>pq; for(int i = 0;i<k;i++){ pq.insert({occ[i][1],i}); } bool curr[n]; fill(curr,curr+n,0); fill(curr,curr+k,1); for(int i = 0;i<n;i++){ array<int,2>a=*(--pq.end()); if(curr[c[i]]){ pq.erase({i,c[i]}); int nx = *upper_bound(occ[c[i]].begin(),occ[c[i]].end(),i); pq.insert({nx,c[i]}); continue; } rem[i]=a[1]; pq.erase(--pq.end()); int nx = *upper_bound(occ[c[i]].begin(),occ[c[i]].end(),i); curr[rem[i]]=0; curr[c[i]]=1; pq.insert({nx,c[i]}); } int adv1[k]; int adv2[n]; fill(adv1,adv1+k,0); fill(adv2,adv2+n,0); for(int i = 0;i<n;i++){ if(rem[i]==-1) continue; int ind = *(upper_bound(occ[rem[i]].begin(),occ[rem[i]].end(),i)-1); if(ind==-1){ adv1[rem[i]]=1; } else{ adv2[ind]=1; } } for(int i = 0;i<k;i++){ WriteAdvice(adv1[i]); } for(int i = 0;i<n;i++){ WriteAdvice(adv2[i]); } }
#include <bits/stdc++.h> #include "assistant.h" using namespace std; void Assist(unsigned char *a, int n, int k, int r) { set<int>remable; set<int>curr; for(int i = 0;i<k;i++){ if(a[i]==1){ remable.insert(i); } curr.insert(i); } for(int i = 0;i<n;i++){ int col = GetRequest(); if(curr.find(col)==curr.end()){ //not found PutBack(*remable.begin()); curr.erase(*remable.begin()); remable.erase(remable.begin()); } if(a[i+k]==1){ remable.insert(col); } curr.insert(col); } }
#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...