Submission #137823

#TimeUsernameProblemLanguageResultExecution timeMemory
137823mohammedehab2002Last supper (IOI12_supper)C++11
0 / 100
138 ms11072 KiB
#include "advisor.h" #include <bits/stdc++.h> using namespace std; int arr[200005],nex[200005],l[200005],advice[200005]; pair<int,int> cur[100005]; void ComputeAdvice(int *c,int n,int k,int m) { for (int i=0;i<k;i++) arr[i]=i; for (int i=k;i<n+k;i++) arr[i]=c[i-k]; for (int i=n+k-1;i>=0;i--) { if (!l[arr[i]]) nex[i]=1e9; else nex[i]=l[arr[i]]; l[arr[i]]=i; } set<pair<int,int>,greater<pair<int,int> > > s; for (int i=0;i<n;i++) { cur[i]={-1,-1}; if (i<k) { s.insert({nex[i],i}); cur[i]={nex[i],i}; } } for (int i=k;i<n+k;i++) { if (cur[arr[i]].first==-1) { cur[arr[s.begin()->second]]={-1,-1}; s.erase(s.begin()); } else { s.erase(cur[arr[i]]); advice[cur[arr[i]].second]=1; cur[arr[i]]={nex[i],i}; s.insert(cur[arr[i]]); } s.insert({nex[i],i}); } for (int i=0;i<n+k;i++) WriteAdvice(advice[i]); }
#include "assistant.h" #include <bits/stdc++.h> using namespace std; bool in[100005]; void Assist(unsigned char *advice,int n,int k,int r) { set<int> s; for (int i=0;i<k;i++) { in[i]=1; if (!advice[i]) s.insert(i); } for (int i=k;i<n+k;i++) { int cur=GetRequest(); if (in[cur]) continue; PutBack(*s.begin()); in[*s.begin()]=0; s.erase(s.begin()); in[cur]=1; if (!advice[i]) s.insert(cur); else if (s.find(cur)!=s.end()) s.erase(cur); } }
#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...