Submission #679355

#TimeUsernameProblemLanguageResultExecution timeMemory
679355Cross_RatioParrots (IOI11_parrots)C++14
81 / 100
6 ms1316 KiB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;
array<int, 4> B[105];
void encode(int N, int M[]) {
    int i, j;
    B[0] = {0, 0, 0, 0};
    B[1] = {0, 0, 0, 1};
    B[2] = {0, 0, 0, 2};
    B[3] = {0, 0, 0, 3};
    B[4] = {0, 0, 1, 1};
    B[5] = {0, 0, 1, 2};
    B[6] = {0, 0, 1, 3};
    B[7] = {0, 0, 2, 2};
    B[8] = {0, 0, 2, 3};
    B[9] = {0, 0, 3, 3};
    B[10] = {0, 1, 1, 1};
    B[11] = {0, 1, 1, 2};
    B[12] = {0, 1, 1, 3};
    B[13] = {0, 1, 2, 2};
    B[14] = {0, 1, 2, 3};
    B[15] = {0, 1, 3, 3};
    for(i=0;i<N;i++) {
        int x = M[i] / (1<<4);
        for(j=0;j<4;j++) {
            int val = (1<<3) * i + 0 * (1<<2) + B[x][j];
            send(val);
        }
        x = M[i] % (1<<4);
        for(j=0;j<4;j++) {
            int val = (1<<3) * i + 1 * (1<<2) + B[x][j];
            send(val);
        }
    }
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;
int C[256];
vector<int> V[64][2];
void decode(int N, int L, int X[]) {
    int i, j;
    C[0*64+0*16+0*4+0*1] = 0;
    C[0*64+0*16+0*4+1*1] = 1;
    C[0*64+0*16+0*4+2*1] = 2;
    C[0*64+0*16+0*4+3*1] = 3;
    C[0*64+0*16+1*4+1*1] = 4;
    C[0*64+0*16+1*4+2*1] = 5;
    C[0*64+0*16+1*4+3*1] = 6;
    C[0*64+0*16+2*4+2*1] = 7;
    C[0*64+0*16+2*4+3*1] = 8;
    C[0*64+0*16+3*4+3*1] = 9;
    C[0*64+1*16+1*4+1*1] = 10;
    C[0*64+1*16+1*4+2*1] = 11;
    C[0*64+1*16+1*4+3*1] = 12;
    C[0*64+1*16+2*4+2*1] = 13;
    C[0*64+1*16+2*4+3*1] = 14;
    C[0*64+1*16+3*4+3*1] = 15;
  assert(L==8*N);
  for(i=0;i<N;i++) {
    V[i][0].clear();
    V[i][1].clear();
  }
    for(i=0; i<L; i++) {
        int v = X[i];
        V[v / (1<<3)][(v / (1<<2)) % 2].push_back(v % (1<<2));
    }
    for(i=0;i<N;i++) {
        sort(V[i][0].begin(),V[i][0].end());
      	reverse(V[i][0].begin(),V[i][0].end());
        int v1 = 0, cnt1 = 1;
        for(j=0;j<4;j++) {
            v1 += V[i][0][j] * cnt1;
            cnt1 *= 4;
        }
        int k1 = C[v1];
        sort(V[i][1].begin(),V[i][1].end());
      	reverse(V[i][1].begin(),V[i][1].end());
        int v2 = 0, cnt2 = 1;
        for(j=0;j<4;j++) {
            v2 += V[i][1][j] * cnt2;
            cnt2 *= 4;
        }
        int k2 = C[v2];
        output(k1 * (1<<4) + k2);
    }
}
#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...