Submission #623148

#TimeUsernameProblemLanguageResultExecution timeMemory
623148ollelLast supper (IOI12_supper)C++14
43 / 100
2592 ms4184 KiB
using namespace std; #include <bits/stdc++.h> #include "advisor.h" typedef vector<int> vi; typedef vector<vi> vvi; typedef long long ll; typedef pair<int,int> pii; typedef vector<bool> vb; #define rep(i,a,b) for(int i = a; i < b; i++) #define pb push_back // void WriteAdvice(int x) { // cout << x << " "; // } void ComputeAdvice(int *c, int n, int k, int m) { set<int> scaffold; rep(i,0,k) scaffold.insert(i); vi advice(2*n, 0); vi added(n, 0); rep(i,0,k) added[i] = i; // for (auto k : scaffold) cout << k << " "; cout << endl; rep(i,0,n) { int color = c[i]; added[color] = n+i; if (scaffold.find(color) != scaffold.end()) { continue; } set<int> passed; bool adviced = false; rep(j,i+1,n) { if (passed.size() == scaffold.size() - 1) { int res = 0; for (auto x : scaffold) if (passed.find(x) == passed.end()) res = x; advice[added[res]] = 1; // cout << "remove " << res << " at " << i << ", advice: " << added[res] << endl; scaffold.erase(res); adviced = true; } if (scaffold.find(c[j]) != scaffold.end()) passed.insert(c[j]); } if (!adviced) { int res = 0; for (auto x : scaffold) if (passed.find(x) == passed.end()) res = x; advice[added[res]] = 1; // cout << "remove " << res << " at " << i << ", advice: " << added[res] << endl; scaffold.erase(res); } scaffold.insert(c[i]); // for (auto k : scaffold) cout << k << " "; cout << endl; } rep(i,0,2*n) WriteAdvice(advice[i]); } // int main() { // int c[] ={0, 4, 5, 2, 1, 3}; // ComputeAdvice(c, 6, 3, -1); // }
using namespace std; #include <bits/stdc++.h> #include "assistant.h" typedef vector<int> vi; typedef vector<vi> vvi; typedef long long ll; typedef pair<int,int> pii; typedef vector<bool> vb; #define rep(i,a,b) for(int i = a; i < b; i++) #define pb push_back void Assist(unsigned char *a, int n, int k, int r) { set<int> scaffold; rep(i,0,k) scaffold.insert(i); vector<int> advice(2*n); rep(i,0,2*n) advice[i] = a[i]; queue<int> q; rep(i,0,k) if (advice[i] == 1) q.push(i); rep(i,0,n) { int nextColor = GetRequest(); if (scaffold.find(nextColor) == scaffold.end()) { int rem = q.front(); q.pop(); PutBack(rem); scaffold.erase(rem); scaffold.insert(nextColor); } if (advice[n + i] == 1) { q.push(nextColor); } } }
#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...