제출 #1157401

#제출 시각아이디문제언어결과실행 시간메모리
1157401alexdd앵무새 (IOI11_parrots)C++20
52 / 100
2 ms840 KiB
#include "encoder.h"
#include "encoderlib.h"
#include<bits/stdc++.h>
using namespace std;
void encode(int N, int M[])
{
    vector<int> sir;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<8;j++)
        {
            if((1<<j)&M[i])
                sir.push_back(1);
            else
                sir.push_back(0);
        }
    }
    assert((int)sir.size() == 8*N);

    for(int lun=1;lun<=15*N;lun++)
    {
        int cnt_id = log2(lun);
        if((1<<cnt_id) < lun)
            cnt_id++;
        int cnt_val = 8 - cnt_id;
        if(cnt_val*lun >= 8*N)
        {
            for(int i=0;i<lun;i++)
            {
                int aux=i;
                for(int j=0;j<cnt_val;j++)
                    if(sir[i*cnt_val+j])
                        aux += (1<<(cnt_id+j));
                send(aux);
            }
            return;
        }
    }
    assert(0);
}
/*

primii log2(N) biti -> id
urmatorii log2(8 - log2(N)) biti -> bucket
ultimii 8 - log2(N) - log2(8 - log2(N)) biti -> valoare

K = N * (8 / (8 - log2(N) - log2(8 - log2(N))))



*/
#include "decoder.h"
#include "decoderlib.h"
#include<bits/stdc++.h>
using namespace std;
void decode(int N, int lun, int X[])
{
    int cnt_id = log2(lun);
    if((1<<cnt_id) < lun)
        cnt_id++;
    int cnt_val = 8 - cnt_id;
    assert(cnt_val*lun >= 8*N);
    vector<int> sir(8*N,0);
    for(int i=0;i<lun;i++)
    {
        int id=0;
        for(int j=0;j<cnt_id;j++)
            if((1<<j)&X[i])
                id += (1<<j);
        for(int j=0;j<cnt_val;j++)
            if((1<<(cnt_id+j))&X[i])
                sir[id*cnt_val+j]=1;
    }
    for(int i=0;i<N;i++)
    {
        int val=0;
        for(int b=0;b<8;b++)
            if(sir[i*8+b])
                val += (1<<b);
        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...