제출 #1237741

#제출 시각아이디문제언어결과실행 시간메모리
1237741pcp최후의 만찬 (IOI12_supper)C++20
26 / 100
195 ms72436 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<=6000)return 13; 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({lastc[i].front(),i}); else kiwi.push({N+1,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(); int c2 = it.second; int slot = slots2[c2]; //cout<<it.first<<" "<<it.second<<" "<<kiwi.size()<<endl; //cout<<kiwi.top().first<<" "<<kiwi.top().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({ lastc[c].front(),c}); else kiwi.push({ N+1,c}); } }
#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 13; if (N<=25000)return 15; return 19; } 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){ int slot=0; for (int j = p*globallen; j < (p+1)*globallen;++j){ if (A[j]==1)slot+=pow(2, (p+1)*globallen - j - 1); } //cout<<slot<<endl; ++p; //reverse(adv.begin(),adv.end()); //cout<<adv<<endl; 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...