제출 #124357

#제출 시각아이디문제언어결과실행 시간메모리
124357nxteru앵무새 (IOI11_parrots)C++14
100 / 100
13 ms1784 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void encode(int N, int M[]){
	ll n,dp[40][40],rs=0;
	for(int i=0;i<40;i++)for(int j=0;j<40;j++)dp[i][j]=0;
	n=N;
	for(int i=0;i<27;i++)dp[0][i]=1LL;
	for(int i=1;i<35;i++){
		for(int j=0;j<27;j++){
			for(int k=0;k<=j;k++){
				dp[i][j]+=dp[i-1][k];
			}
		}
	}
	for(int i=0;i<35;i++){
		for(int j=1;j<27;j++){
			dp[i][j]+=dp[i][j-1];
		}
	}
	for(int i=0;i<n;i+=7){
		ll s=0,p=0;
		for(int j=i;j<n&&j<i+7;j++,p++){
			s*=256LL;
			s+=ll(M[j]);
		}
		p*=5LL;
		s++;
		for(int j=p-1;j>=0;j--){
			for(int k=0;k<min(256LL-rs,27LL);k++){
				if(dp[j][k]>=s){
					send(rs+k);
					if(k>0)s-=dp[j][k-1];
					break;
				}
			}
		}
		rs+=27LL;
	}
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void decode(int N, int L, int X[]){
	ll n,l,dp[40][40],rs=0,xs=0;
	for(int i=0;i<40;i++)for(int j=0;j<40;j++)dp[i][j]=0;
	n=N,l=L;
	sort(X,X+l);
	for(int i=0;i<27;i++)dp[0][i]=1LL;
	for(int i=1;i<35;i++){
		for(int j=0;j<27;j++){
			for(int k=0;k<=j;k++){
				dp[i][j]+=dp[i-1][k];
			}
		}
	}
	for(int i=0;i<35;i++){
		for(int j=1;j<27;j++){
			dp[i][j]+=dp[i][j-1];
		}
	}
	for(int i=0;i<n;i+=7){
		ll s=0,p=0;
		for(int j=i;j<n&&j<i+7;j++,p++);
		p*=5LL;
		for(int j=p-1;j>=0;j--){
			if(X[xs+j]-rs>0)s+=dp[j][X[xs+j]-rs-1];
		}
		xs+=p;
		rs+=27LL;
		p/=5LL;
		for(ll i=p-1;i>=0;i--)output((s>>(i*8LL))&255LL);
	}
}
#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...