제출 #595217

#제출 시각아이디문제언어결과실행 시간메모리
595217Bench0310앵무새 (IOI11_parrots)C++17
100 / 100
7 ms1348 KiB
#include <bits/stdc++.h> #include "encoder.h" #include "encoderlib.h" using namespace std; typedef long long ll; static const int S=20; static ll C[2*S+1][2*S+1]; static void ini() { for(int i=0;i<=2*S;i++) C[i][0]=1; for(int i=1;i<=2*S;i++) for(int j=1;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1]; } static ll opt(int n,int m){return C[n+m-1][n];} array<int,16> enc(array<int,4> a,int cnt) { reverse(a.begin(),a.end()); ll b=0; for(int i=0;i<4;i++) b=(b<<8)+a[i]; array<int,16> c; c.fill(0); for(int i=0;i<16;i++) { while(cnt>0&&opt(cnt,16-i)<=b) { b-=opt(cnt,16-i); c[i]++; cnt--; } } assert(b==0); return c; } void encode(int N,int M[]) { ini(); for(int i=0;i<N;i+=4) { array<int,4> a; a.fill(0); for(int j=0;j<4&&i+j<N;j++) a[j]=M[i+j]; array<int,16> c=enc(a,5*min(4,N-i)); for(int j=0;j<16;j++) for(int k=0;k<c[j];k++) send(((i>>2)<<4)+j); } }
#include <bits/stdc++.h> #include "decoder.h" #include "decoderlib.h" using namespace std; typedef long long ll; static const int S=20; static ll C[2*S+1][2*S+1]; static void ini() { for(int i=0;i<=2*S;i++) C[i][0]=1; for(int i=1;i<=2*S;i++) for(int j=1;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1]; } static ll opt(int n,int m){return C[n+m-1][n];} array<int,4> dec(array<int,16> c,int cnt) { ll b=0; for(int i=0;i<16;i++) { while(c[i]--) { b+=opt(cnt,16-i); cnt--; } } array<int,4> a; for(int i=3;i>=0;i--) { a[i]=(b&255); b>>=8; } reverse(a.begin(),a.end()); return a; } void decode(int N,int L,int X[]) { ini(); vector<array<int,16>> v(N); for(int i=0;i<N;i++) v[i].fill(0); for(int i=0;i<L;i++) { int x=X[i]; v[(x>>4)<<2][x&15]++; } for(int i=0;i<N;i+=4) { array<int,4> a=dec(v[i],5*min(4,N-i)); for(int j=0;j<4&&i+j<N;j++) output(a[j]); } }
#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...