제출 #421985

#제출 시각아이디문제언어결과실행 시간메모리
421985pliam앵무새 (IOI11_parrots)C++14
88 / 100
13 ms1368 KiB
#include "encoder.h"
#include "encoderlib.h"

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
    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
        if(cnt>=1){
          send((num<<2)|pos);
        }if(cnt>=2){
          send((num<<2)|pos);
        }if(cnt==3){
          send((num<<2)|pos);
        }
        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
    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))*freq[mask];
        }
      }
      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...