답안 #961397

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
961397 2024-04-12T03:43:10 Z emptypringlescan 앵무새 (IOI11_parrots) C++17
81 / 100
4 ms 1588 KB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;
void encode(int n, int m[]){
	if(n>32) for(int i=0; i<10*n; i++) send(255);
	mt19937 rng(177013);
	int t=n*8,cnt=0;
	for(int i=0; i<n; i++){
		for(int j=7; j>=0; j--){
			if(m[i]>>j&1) cnt++;
		}
	}
	int num=0,x=0;
	if(cnt==t/2){
		while(true){
			num++;
			x=rng()%t;
			if(m[x/8]>>(x%8)&1){
				m[x/8]^=1<<(x%8);
				for(int i=0; i<num+1; i++) send(255);
				break;
			}
		}
	}
	int prev=0;
	if(cnt<=t/2){
		for(int i=0; i<n; i++){
			for(int j=0; j<8; j++){
				if(m[i]>>j&1){
					prev++;
					send(prev);
				}
				else send(prev);
			}
		}
	}
	else{
		for(int i=0; i<n; i++){
			for(int j=0; j<8; j++){
				if(!(m[i]>>j&1)){
					prev++;
					send(prev);
				}
				else send(prev);
			}
		}
		send(255);
	}
	if(num) m[x/8]^=1<<(x%8);
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;
void decode(int n, int l, int x[]){
	sort(x,x+l);
	assert(l>=8*n);
	mt19937 rng(177013);
	if(n>32) l-=10*n;
	int bits[8*n],ex=l-8*n;
	if(ex==1){
		int prev=0;
		for(int i=0; i<8*n; i++){
			bits[i]=x[i]-prev;
			prev=x[i];
			bits[i]^=1;
		}
	}
	else{
		int prev=0;
		for(int i=0; i<8*n; i++){
			bits[i]=x[i]-prev;
			prev=x[i];
		}
		if(ex>0){
			int y=0;
			for(int i=0; i<ex-1; i++) y=rng()%(8*n);
			//cout << y << ' ';
			bits[y]^=1;
		}
	}
	for(int i=0; i<n; i++){
		int ret=0;
		for(int j=0; j<8; j++){
			ret+=bits[i*8+j]<<j;
		}
		output(ret);
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 784 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1332 KB Output is correct
2 Correct 2 ms 1312 KB Output is correct
3 Correct 3 ms 1324 KB Output is correct
4 Correct 3 ms 1328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1308 KB Output is correct
2 Correct 2 ms 1308 KB Output is correct
3 Correct 3 ms 1320 KB Output is correct
4 Correct 3 ms 1316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1588 KB Output is correct
2 Correct 3 ms 1320 KB Output is correct
3 Correct 3 ms 1580 KB Output is correct
4 Correct 4 ms 1344 KB Output is correct
5 Correct 4 ms 1348 KB Output is correct
6 Correct 4 ms 1340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 3 ms 1328 KB Output is partially correct - P = 8.125000
2 Partially correct 4 ms 1340 KB Output is partially correct - P = 8.218750
3 Incorrect 1 ms 796 KB Error : Encoded message too long
4 Halted 0 ms 0 KB -