Submission #14789

# Submission time Handle Problem Language Result Execution time Memory
14789 2015-06-24T07:22:00 Z gs14004 Parrots (IOI11_parrots) C++14
0 / 100
2000 ms 114816 KB
#include "encoder.h"
#include "encoderlib.h"
#include <cstring>
using namespace std;

const int cut = 1ll << 16;

struct bignum{
    int arr[40];
    void init(char i){
        memset(arr,0,sizeof(arr));
        arr[0] = i;
    }
};

bignum operator+(bignum a, bignum b){
    for (int i=0; i<40; i++) {
        a.arr[i] += b.arr[i];
        if(a.arr[i] >= 65536) {
            a.arr[i] -= 65536;
            a.arr[i+1] ++;
        }
    }
    return a;
}

bool operator<(bignum a, bignum b){
    for (int i=39; i>=0; i--) {
        if(a.arr[i] < b.arr[i]) return 1;
        if(a.arr[i] > b.arr[i]) return 0;
    }
    return 0;
}

bignum bino[600][600];

void encode(int N, int* M){
    for (int i=0; i<600; i++) {
        bino[i][0].init(1);
        for (int j=1; j<=i; j++) {
            bino[i][j] = bino[i-1][j] + bino[i-1][j-1];
        }
        for (int j=i+1; j<600; j++) {
            bino[i][j].init(0);
        }
    }
    bignum base, t;
    t.init(0);
    for (int i=0; i<N; i++) {
        t.arr[i] = M[i] | (M[i+1] << 8);
    }
    base.init(0);
    int length = 255 + 5 * N;
    for(int i=0; i<5*N; i++){
        while (t < bino[length-1][5 * N - i] + base) {
            length--;
        }
        send(5 * N + 255 - length - i - 1);
        base = base + bino[length-1][5 * N - i];
        length--;
    }
}
#include "decoder.h"
#include "decoderlib.h"
#include <algorithm>
#include <cstring>
using namespace std;

struct bignum{
    int arr[40];
    void init(char i){
        memset(arr,0,sizeof(arr));
        arr[0] = i;
    }
};

bignum operator+(bignum a, bignum b){
    for (int i=0; i<40; i++) {
        a.arr[i] += b.arr[i];
        if(a.arr[i] >= 65536) {
            a.arr[i] -= 65536;
            a.arr[i+1] ++;
        }
    }
    return a;
}

bool operator<(bignum a, bignum b){
    for (int i=39; i>=0; i--) {
        if(a.arr[i] < b.arr[i]) return 1;
        if(a.arr[i] > b.arr[i]) return 0;
    }
    return 0;
}

bignum bino[600][600];

void decode(int N, int L, int X[])
{
    for (int i=0; i<600; i++) {
        bino[i][0].init(1);
        for (int j=1; j<=i; j++) {
            bino[i][j].init(0);
            bino[i][j] = bino[i-1][j] + bino[i-1][j-1];
        }
        for (int j=i+1; j<600; j++) {
            bino[i][j].init(0);
        }
    }
    sort(X,X+L);
    bignum ret;
    ret.init(0);
    for (int i=0; i<L; i++) {
        ret = ret + bino[5 * N + 255 - X[i] - i - 2][5 * N - i];
    }
    for (int i=0; i<N/2; i++) {
        output(ret.arr[i] & 255);
        output(ret.arr[i] >> 8);
    }
    if(N%2 == 1){
        output(ret.arr[N-1] & 255);
    }
}
# Verdict Execution time Memory Grader output
1 Incorrect 556 ms 113712 KB Error : Output is wrong
# Verdict Execution time Memory Grader output
1 Execution timed out 2062 ms 114544 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2029 ms 114544 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2176 ms 114544 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2147 ms 114816 KB Time limit exceeded
2 Incorrect 110 ms 114816 KB Error : Bad encoded integer
3 Incorrect 126 ms 114816 KB Error : Bad encoded integer
4 Incorrect 106 ms 114816 KB Error : Bad encoded integer
5 Incorrect 105 ms 114816 KB Error : Bad encoded integer
6 Incorrect 107 ms 114816 KB Error : Bad encoded integer
7 Incorrect 108 ms 114816 KB Error : Bad encoded integer