Submission #1338104

#TimeUsernameProblemLanguageResultExecution timeMemory
1338104hyyhParrots (IOI11_parrots)C++20
81 / 100
2 ms836 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <set> 
#include <bitset>
using namespace std;
using pii = pair<int,int>;
#define s second
#define f first

void encode(int N, int M[])
{
  bitset<512> bs;
  int cnt = 0;
  for(int i{};i < N;i++){
    for(int j{};j < 8;j++){
      bs[i*8+j] = (M[i]>>j)&1;
      cnt += bs[i*8+j];
    }
  }
  int save = 0;
  if(cnt > N*4){
    send(0);
    send(0);
    send(0);
    send(0);
    save = 1;
  }
  for(int i{};i < N*8;i++){
    if(bs[i] ^ save) send(i);
  }
}

//2 bit position 1-4 -> 6 bit position
#include "decoder.h"
#include "decoderlib.h"
#include <bitset>
#include <iostream>

void decode(int N, int L, int X[])
{
  std::bitset<512> ans;
  int cnt = 0;
  for(int i{};i < L;i++){
    if(X[i] == 0) cnt++;
  }
  int val = 1;
  if(cnt >= 4){
    val = 0;
    ans.set();
    cnt = 4;
  }
  else cnt = 0;
  for(int i{};i < L;i++){
    if(X[i] == 0){
      if(val == 0 && cnt--) continue;
      else ans[X[i]] = val;
    }
    else ans[X[i]] = val;
  }
  //cout << ans << endl;
  int cur = 0;
  for(int i{};i <= N*8;i++){
    if(i%8 == 0 && i != 0) output(cur),cur = 0;
    cur += ans[i]<<(i%8);
    //cout << cur << " -"<< endl;
  }
}
#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...