Submission #497292

#TimeUsernameProblemLanguageResultExecution timeMemory
497292OzyParrots (IOI11_parrots)C++17
98 / 100
7 ms1328 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define rep(i,a,b) for(int i = (a); i <= (b); i++)
#define repa(i,a,b) for(int i = (a); i >= (b); i--)
#define debug(a) cout << #a << " = " << a << endl
#define debugsl(a) cout << #a << " = " << a << ", "

void encode(int N, int M[])
{
    lli n,num,uno,cero,a,b;

    n = N;
    uno = 0;
    cero = 0;

    rep(i,0,n-1) {

        num = M[i];
        a = num;
        rep(i,1,8) {
            if (a&1) uno++;
            else cero++;
            a/=2;
        }
    }

    //cero = uno;
    if (cero > uno) {
        rep(i,1,4) send(0);

        rep(i,0,n-1) {

            num = M[i];
            a = i << 2;

            rep(j,0,3) {

                b = (num&3);
                rep(x,1,b) send(a+j);
                num>>=2;
            }
        }
    }
    else {

        rep(i,0,n-1) {

            num = M[i];
            a = i << 2;

            rep(j,0,3) {

                b = (num&3);
                repa(x,2,b) send(a+j);
                num>>=2;
            }
        }

    }

}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
#define rep(i,a,b) for(int i = (a); i <= (b); i++)
#define repa(i,a,b) for(int i = (a); i >= (b); i--)
#define debug(a) cout << #a << " = " << a << endl
#define debugsl(a) cout << #a << " = " << a << ", "



void decode(int N, int L, int X[])
{
    lli num[70][4],n,a,b,pos;

    n = N;
    lli cont = 0;
    rep(i,0,L-1) if (X[i] == 0) cont++;

    if (cont > 3) {

        rep(i,0,n-1) {
            rep(j,0,3) num[i][j] = 0;
        }

        cont=4;
        rep(i,0,L-1) {
            if (X[i] == 0 && cont > 0) {
                cont--;
                continue;
            }

            a = X[i];
            pos = a>>2;
            b = (a&3);
            num[pos][b]++;

            //debugsl(a);
            //debugsl(pos);
            //debugsl(b);
            //debug(num[pos][b]);
        }

        rep(i,0,n-1) {

            a = 0;
            a += num[i][0];
            a += num[i][1] * 4;
            a += num[i][2] * 16;
            a += num[i][3] * 64;
            output(a);
        }

    }
    else {

        rep(i,0,n-1) {
            rep(j,0,3) num[i][j] = 3;
        }

        rep(i,0,L-1) {

            a = X[i];
            pos = a>>2;
            b = (a&3);
            num[pos][b]--;

            //debugsl(a);
            //debugsl(pos);
            //debugsl(b);
            //debug(num[pos][b]);
        }

        rep(i,0,n-1) {

            a = 0;
            a += num[i][0];
            a += num[i][1] * 4;
            a += num[i][2] * 16;
            a += num[i][3] * 64;
            output(a);
        }

    }
}
#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...