Submission #1237706

#TimeUsernameProblemLanguageResultExecution timeMemory
1237706pcpLast supper (IOI12_supper)C++20
0 / 100
198 ms72708 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; } 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>> kiwi; for (int i = 0; i<N;++i)lastc[C[i]].push(i); for (int i = 0 ; i < K; ++i){ if (lastc[i].size()>0)kiwi.push({i,lastc[i].front()}); else kiwi.push({i,N+1}); 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(); int c2 = it.first; int slot = slots2[c2]; //cout<<it.first<<" "<<it.second<<" "<<kiwi.size()<<endl; string t_write = getstuff(slot, K); //cout<<t_write<<endl; for (char x : t_write){ if (x=='0')WriteAdvice(0); if (x=='1')WriteAdvice(1);} slots2[c2]=-1; slots2[c]=slot; } if (lastc[c].size()>0)kiwi.push({ c,lastc[c].front()}); else kiwi.push({ c,N+1}); } }
#include <cstring> #include <iostream> #include <cmath> #include <string> #include <queue> #include <algorithm> #include "assistant.h" using namespace std; int globallen; int get_bit_len2(int N){ if (N<=5000)return 14; if (N<=25000)return 15; return 19; } int get_num2(string txt){ int c=0; for (int i = globallen-1;i>=0;--i){ int ri = globallen-i-1; if (txt[i]==1)c+=pow(2,ri); //else cout<<txt[i] + '0'<<endl; } return c; } void Assist(unsigned char *A, int N, int K, int R) { int slots[N]; int slot2[N]; globallen=get_bit_len2(K); memset(slots, -1, sizeof slots);memset(slot2, -1, sizeof slot2); for (int i = 0 ; i < K;++i){slots[i]=i;slot2[i]=i;} int i; int p=0; for (i = 0; i < N; i++) { int req = GetRequest(); if (slots[req]==-1){ string adv; for (int j = p*globallen; j < (p+1)*globallen;++j)adv+=A[j]; ++p; //reverse(adv.begin(),adv.end()); //cout<<adv<<endl; int slot = get_num2(adv); slots[req]=slot; slots[slot2[slot]]=-1; PutBack(slot2[slot]); slot2[slot]=req; } } }
#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...