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