제출 #1237683

#제출 시각아이디문제언어결과실행 시간메모리
1237683pcp최후의 만찬 (IOI12_supper)C++20
0 / 100
36 ms68808 KiB
#include "advisor.h" #include <iostream> #include <cstring> #include <cmath> #include <bitset> #include <queue> #include <string> using namespace std; int get_bit_len(int N){ if (N<=5000)return 14; if (N<=25000)return 15; return 19; } int get_num(string txt){ int c=0; for (int i = txt.size()-1;i>=0;--i){ int ri = txt.size()-i-1; if (txt[i]=='1')c+=pow(2,ri); } return c; } string getstuff(int num, int N){ const int k = get_bit_len(N); string xd; if (k==14)xd = bitset<14>(num).to_string(); if (k==15)xd = bitset<15>(num).to_string(); if (k==19)xd = bitset<19>(num).to_string(); return xd; } void ComputeAdvice(int *C, int N, int K, int M) { queue<int> lastc[N]; int slots2[N]; memset(slots2, -1, sizeof slots2); priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> kiwi; for (int i = 0; i<N;++i)lastc[C[i]].push(i); for (int i = 0 ; i < K; ++i){kiwi.push({lastc[i].front(),i});slots2[i]=i;} for (int i = 0; i <N;++i){ int c = C[i]; lastc[c].pop(); if (slots2[c]==-1){ pair<int,int> it = kiwi.top();kiwi.pop(); //while (it.first <= i || it.second != c ){it = kiwi.top();kiwi.pop();} int c2 = it.second; int slot = slots2[c2]; string t_write = getstuff(slot, K); for (auto x : t_write)WriteAdvice(x); slots2[c2]=-1; slots2[c]=slot; } if (lastc[c].size()>0)kiwi.push({lastc[c].front(), c}); else kiwi.push({N+1, c}); } }
#include "assistant.h" void Assist(unsigned char *A, int N, int K, int R) { int i; for (i = 0; i < N; i++) { int req = GetRequest(); if (req >= K) PutBack(req % K); } }
#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...