답안 #14792

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
14792 2015-06-24T07:36:27 Z gs14004 앵무새 (IOI11_parrots) C++14
0 / 100
2000 ms 64240 KB
#include "encoder.h"
#include "encoderlib.h"
#include <vector>
using namespace std;

struct bignum{
    vector<short> v;
    void init(char i){
        v.clear();
        v.push_back(i);
    }
};

bignum operator+(bignum a, bignum b){
    for (int i=0; i<a.v.size(); i++) {
        if(b.v.size() == i) break;
        a.v[i] += b.v[i];
        if(a.v[i] >= 256){
            a.v[i] -= 256;
            if(i + 1 == a.v.size()) a.v.push_back(0);
            a.v[i+1] ++;
        }
    }
    for (int i=(int)a.v.size(); i<b.v.size(); i++) {
        a.v.push_back(b.v[i]);
    }
    return a;
}

bool operator<(bignum a, bignum b){
    if(a.v.size() != b.v.size()) return a.v.size() < b.v.size();
    for (int i=(int)a.v.size()-1; i>=0; i--) {
        if(a.v[i] < b.v[i]) return 1;
        if(a.v[i] > b.v[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.v.clear();
    for (int i=0; i<N; i++) {
        t.v.push_back(M[i]);
    }
    base.init(0);
    t = t + base;
    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 <vector>
using namespace std;

struct bignum{
    vector<short> v;
    void init(char i){
        v.clear();
        v.push_back(i);
    }
};

bignum operator+(bignum a, bignum b){
    for (int i=0; i<a.v.size(); i++) {
        if(b.v.size() == i) break;
        a.v[i] += b.v[i];
        if(a.v[i] >= 256){
            a.v[i] -= 256;
            if(i + 1 == a.v.size()) a.v.push_back(0);
            a.v[i+1] ++;
        }
    }
    for (int i=(int)a.v.size(); i<b.v.size(); i++) {
        a.v.push_back(b.v[i]);
    }
    return a;
}

bool operator<(bignum a, bignum b){
    if(a.v.size() != b.v.size()) return a.v.size() < b.v.size();
    for (int i=(int)a.v.size()-1; i>=0; i--) {
        if(a.v[i] < b.v[i]) return 1;
        if(a.v[i] > b.v[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; i++) {
        output(ret.v[i]);
    }
}

Compilation message

encoder.cpp: In function 'bignum operator+(bignum, bignum)':
encoder.cpp:16:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0; i<a.v.size(); i++) {
                   ~^~~~~~~~~~~
encoder.cpp:17:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(b.v.size() == i) break;
            ~~~~~~~~~~~^~~~
encoder.cpp:21:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i + 1 == a.v.size()) a.v.push_back(0);
                ~~~~~~^~~~~~~~~~~~~
encoder.cpp:25:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=(int)a.v.size(); i<b.v.size(); i++) {
                                 ~^~~~~~~~~~~

decoder.cpp: In function 'bignum operator+(bignum, bignum)':
decoder.cpp:17:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0; i<a.v.size(); i++) {
                   ~^~~~~~~~~~~
decoder.cpp:18:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(b.v.size() == i) break;
            ~~~~~~~~~~~^~~~
decoder.cpp:22:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i + 1 == a.v.size()) a.v.push_back(0);
                ~~~~~~^~~~~~~~~~~~~
decoder.cpp:26:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=(int)a.v.size(); i<b.v.size(); i++) {
                                 ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 925 ms 64240 KB Error : Output is wrong
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2078 ms 32424 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2077 ms 32644 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2062 ms 32644 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2069 ms 32644 KB Time limit exceeded
2 Execution timed out 2064 ms 32644 KB Time limit exceeded
3 Execution timed out 2084 ms 32644 KB Time limit exceeded
4 Execution timed out 2083 ms 32736 KB Time limit exceeded
5 Execution timed out 2076 ms 32736 KB Time limit exceeded
6 Execution timed out 2074 ms 32736 KB Time limit exceeded
7 Execution timed out 2073 ms 32736 KB Time limit exceeded