제출 #1157500

#제출 시각아이디문제언어결과실행 시간메모리
1157500alexdd앵무새 (IOI11_parrots)C++20
81 / 100
7 ms840 KiB
#include "encoder.h" #include "encoderlib.h" #include<bits/stdc++.h> using namespace std; vector<int> solve(const vector<int> sir) { for(int cnt_id=0;cnt_id<8;cnt_id++) { int cnt_val = 8 - cnt_id; vector<int> v; for(int i=0;i<sir.size();i+=cnt_val) { v.push_back(0); for(int j=i;j<min(i+cnt_val,(int)sir.size());j++) if(sir[j]==1) v.back() += (1<<(j-i)); } int cate=0; for(int i=1;i<v.size();i++) if(v[i] < v[i-1]) cate++; if((1<<cnt_id) <= cate) continue; vector<int> sol; int cur=0; for(int i=0;i<v.size();i++) { if(i>0 && v[i] < v[i-1]) cur++; sol.push_back((cur<<cnt_val) + v[i]); } for(int i=1;i<sol.size();i++) assert(sol[i]>=sol[i-1]); //cerr<<cnt_id<<" cnt_id encoder\n"; return sol; } assert(0); } void encode(int N, int M[]) { vector<int> sir; for(int i=0;i<N;i++) { for(int j=0;j<8;j++) { if((1<<j)&M[i]) sir.push_back(1); else sir.push_back(0); } } assert((int)sir.size() == 8*N); vector<int> v = solve(sir); for(int x:v) send(x); return; reverse(sir.begin(),sir.end()); vector<int> vrev = solve(sir); } /* */
#include "decoder.h" #include "decoderlib.h" #include<bits/stdc++.h> using namespace std; void decode(int N, int lun, int X[]) { sort(X,X+lun); for(int cnt_val=1;;cnt_val++) { if(cnt_val*lun >= 8*N) { int cnt_id = 8 - cnt_val; vector<int> sir; for(int i=0;i<lun;i++) { for(int j=0;j<cnt_val;j++) { if((1<<j)&X[i]) sir.push_back(1); else sir.push_back(0); } } for(int i=0;i<N;i++) { int val=0; for(int j=0;j<8;j++) if(sir[i*8+j]) val += (1<<j); output(val); } return; } } }
#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...