제출 #231059

#제출 시각아이디문제언어결과실행 시간메모리
231059Dilshod_Imomov앵무새 (IOI11_parrots)C++17
98 / 100
26 ms1792 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 < 8 && 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 < 8 && 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...