제출 #231049

#제출 시각아이디문제언어결과실행 시간메모리
231049Dilshod_Imomov앵무새 (IOI11_parrots)C++17
96 / 100
29 ms2048 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 300;

int cnt_a[MAXN], cnt_b[MAXN], cnt_c[MAXN], cnt_d[MAXN];

void encode(int N, int M[])
{
	int x = 0;
	for ( int a = 0; a < 7; a++ ) {
		for ( int b = 0; b < 7; b++ ) {
			for ( int c = 0; c < 7; c++ ) {
				for ( int d = 0; d < 7; d++ ) {
					if ( x == 256 ) {
						break;
					}
					if ( a + b + c + d < 10 && a + b + c + d > 0 ) {
						cnt_a[x] = a;
						cnt_b[x] = b;
						cnt_c[x] = c;
						cnt_d[x] = d;
						x++;
					}
				}
				if ( x == 256 ) {
					break;
				}
			}
			if ( x == 256 ) {
				break;
			}
		}
		if ( x == 256 ) {
			break;
		}
	}
	x = 0;
	map < pair < int, int > , int > mp;
	for ( int i = 0; i < N; i++ ) {
		for ( int j = 0; j < 4; j++ ) {
			mp[ { i, j } ] = x++;
		}
	}
	for ( int i = 0; i < N; i++ ) {
		int z = M[i];
		for ( int j = 0; j < cnt_a[z]; j++ ) {
			send( mp[ { i, 0 } ] );
		}
		for ( int j = 0; j < cnt_b[z]; j++ ) {
			send( mp[ { i, 1 } ] );
		}
		for ( int j = 0; j < cnt_c[z]; j++ ) {
			send( mp[ { i, 2 } ] );
		}
		for ( int j = 0; j < cnt_d[z]; j++ ) {
			send( mp[ { i, 3 } ] );
		}
	}
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;
void decode(int N, int L, int X[])
{
	string aa, bb, cc, dd;
	int x = 0;
	map < string, int > mp;
	for ( int a = 0; a < 7; a++ ) {
		if ( a ) {
			aa += '0';
		}
		bb = "";
		for ( int b = 0; b < 7; b++ ) {
			if ( b ) {
				bb += '1';
			}
			cc = "";
			for ( int c = 0; c < 7; c++ ) {
				if ( c ) {
					cc += '2';
				}
				dd = "";
				for ( int d = 0; d < 7; d++ ) {
					if ( x == 256 ) {
						break;
					}
					if ( d ) {
						dd += '3';
					}
					if ( a + b + c + d < 10 && a + b + c + d > 0 ) {
						string s = aa + bb + cc + dd;
						mp[s] = x++;
					}
				}
				if ( x == 256 ) {
					break;
				}
			}
			if ( x == 256 ) {
				break;
			}
		}
		if ( x == 256 ) {
			break;
		}
	}
	map < int, pair < int, int > > mp1;
	x = 0;
	for ( int i = 0; i < N; i++ ) {
		for ( int j = 0; j < 4; j++ ) {
			mp1[ x++ ] = { i, j };
		}
	}
	vector < int > vc[65];
	for ( int i = 0; i < L; i++ ) {
		auto pr = mp1[X[i]];
		vc[ pr.first ].push_back( pr.second );
	}
	for ( int i = 0; i < N; i++ ) {
		int a = 0, b = 0, c = 0, d = 0;
		for ( auto j: vc[i] ) {
			if ( j == 0 ) {
				a++;
			}
			else if ( j == 1 ) {
				b++;
			}
			else if ( j == 2 ) {
				c++;
			}
			else {
				d++;
			}
		}
		string s;
		for ( int j = 0; j < a; j++ ) {
			s += '0';
		}
		for ( int j = 0; j < b; j++ ) {
			s += '1';
		}
		for ( int j = 0; j < c; j++ ) {
			s += '2';
		}
		for ( int j = 0; j < d; j++ ) {
			s += '3';
		}
		output(mp[s]);
	} 	
}
#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...