Submission #422871

#TimeUsernameProblemLanguageResultExecution timeMemory
422871pliamParrots (IOI11_parrots)C++14
81 / 100
7 ms1180 KiB
#include "encoder.h" #include "encoderlib.h" void sendcnt(int a,int x){ for(int i=0;i<x;i++){ send(a); } } void encode(int N, int M[]) { if(N<=32){ //binary system for(int num=0;num<N;num++){ int pos=0; while(M[num]>0){ if(M[num]&1){ send((num<<3)|pos); } M[num]>>=1; pos++; } } }else{ //4-ary system int cnt1=0,cnt2=0; for(int num=0;num<N;num++){ int pos=0; int tmp=M[num]; while(tmp>0){ int cnt=tmp&3;//mod4=mod(2^2), we keep last 2 digits cnt1+=cnt; cnt2+=(3-cnt); tmp>>=2; pos++; } } bool change=(cnt2<cnt1); if(change) sendcnt(255,4); for(int num=0;num<N;num++){ int pos=0; while(M[num]>0){ int cnt=M[num]&3;//mod4=mod(2^2), we keep last 2 digits sendcnt((num<<2)|pos,change?(3-cnt):cnt); M[num]>>=2; pos++; } } } }
#include "decoder.h" #include "decoderlib.h" #include <bits/stdc++.h> using namespace std; void decode(int N, int L, int X[]) { map<int,int> freq; for(int i=0;i<L;i++){ freq[X[i]]++; } if(N<=32){ //binary system for(int num=0;num<N;num++){ int val=0; for(int pos=0;pos<8;pos++){ int mask=(num<<3)|pos; if(freq.count(mask)){ val|=(1<<pos); } } output(val); } }else{ //4-ary system bool change=false; if(freq.count(255)){ if(freq[255]>=4){ change=true; freq[255]-=4; } } for(int num=0;num<N;num++){ int val=0; for(int pos=0;pos<4;pos++){ int mask=(num<<2)|pos; if(freq.count(mask)){ val|=(1<<(2*pos))*(change?3-freq[mask]:freq[mask]); }else{ val|=(1<<(2*pos))*3; } } output(val); } } }
#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...