# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
41677 |
2018-02-20T12:09:36 Z |
tjd229 |
Parrots (IOI11_parrots) |
C++11 |
|
131 ms |
89904 KB |
#include "encoder.h"
#include "encoderlib.h"
#include <memory.h>
//const int bnde = 264 + 256;
const int bnde = 64*5 + 256;
int ce[bnde][bnde][64];
void add(int dst[], int src1[], int src2[]){
int nxt = 0;
for (int i = 63; i >=0; i--){
dst[i] = src1[i] + src2[i]+nxt;
nxt = dst[i] / 256;
if (i)
dst[i] %= 256;
}
}
void subtract(int dst[],int src1[], int src2[]){
for (int i = 0; i < 64; i++){
dst[i] = src1[i] - src2[i];
}
for (int i = 63; i>0 ; i--){
while (dst[i] < 0){
dst[i] += 256;
dst[i - 1]--;
}
}
}
int cmp(int a1[], int a2[]){
for (int i = 0; i<64; i++){
if (a1[i] > a2[i]) return -1;
if (a1[i] < a2[i]) return 1;
}
return 0;
}
void set(){
int i, j;
for (i = 1; i < bnde; i++){
ce[i][0][63] = ce[i][i][63] = 1;
}
for (i = 2; i < bnde; i++){
for (j = 1; j < i; j++){
add(ce[i][j], ce[i - 1][j - 1], ce[i - 1][j]);
}
}
}
void encode(int N, int M[])
{
static int flage = 0;
int i,j;
if (flage++ == 0) set();
int msg[64] = { 0 };
for (j = 64 - N, i = 0; i < N; i++,j++) msg[j] = M[i];
//for (i = 0; i < N; i++) msg[i] = M[i];
int parrot=262;
for (i = 1; i < 320; i++){
if (cmp(ce[i+256-1][i], msg) == -1){
parrot = i;
break;
}
}
//int out[64] = { 0 };
//int cnt[256] = { 0 };
for (i = 0; i < 256&&parrot; i++){
int a[64] = { 0 };
int last[64] = { 0 };
for (j = 0; j < 261&&parrot; j++){
add(a, last, ce[parrot + 256 - i - 1 - 1][parrot]);
if (cmp(a,msg) == -1) break;
memcpy(last, a, sizeof(last));
send(i);
//cnt[i]++;
parrot--;
}
memcpy(a, msg, sizeof(a));
subtract(msg, a, last);
}
}
#include "decoder.h"
#include "decoderlib.h"
const int bndd = 64*5 + 256;
int cd[bndd][bndd][64];
void addd(int dst[], int src1[], int src2[]){
int nxt = 0;
for (int i = 63; i >= 0; i--){
dst[i] = src1[i] + src2[i] + nxt;
nxt = dst[i] / 256;
if (i)
dst[i] %= 256;
}
}
void set_cd(){
int i, j;
for (i = 1; i < bndd; i++){
cd[i][0][63] = cd[i][i][63] = 1;
}
for (i = 2; i < bndd; i++){
for (j = 1; j < i; j++){
//printf("%d,%d\n",i,j);
addd(cd[i][j], cd[i - 1][j - 1], cd[i - 1][j]);
}
}
}
void decode(int N, int L, int X[])
{
static int flagd = 0;
if (flagd++ == 0) set_cd();
int i,j;
int cnt[256] = { 0 };
int recon[64] = { 0 };
for (i = 0; i < L; i++)
cnt[X[i]]++;
int parrot = L;
for (i = 0; i < 256; i++){
for (j = 0; j < cnt[i]; j++){
addd(recon, recon, cd[parrot + 256 - i - 1 - 1][parrot]);
parrot--;
}
}
for (i = 64-N; i < 64; i++){
output(recon[i]);
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
110 ms |
88304 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
111 ms |
89384 KB |
Output is correct |
2 |
Correct |
114 ms |
89416 KB |
Output is correct |
3 |
Correct |
113 ms |
89904 KB |
Output is correct |
4 |
Correct |
110 ms |
89904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
112 ms |
89904 KB |
Output is correct |
2 |
Correct |
109 ms |
89904 KB |
Output is correct |
3 |
Correct |
111 ms |
89904 KB |
Output is correct |
4 |
Correct |
114 ms |
89904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
111 ms |
89904 KB |
Output is correct |
2 |
Correct |
111 ms |
89904 KB |
Output is correct |
3 |
Correct |
112 ms |
89904 KB |
Output is correct |
4 |
Correct |
113 ms |
89904 KB |
Output is correct |
5 |
Correct |
114 ms |
89904 KB |
Output is correct |
6 |
Correct |
114 ms |
89904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
115 ms |
89904 KB |
Output is correct - P = 1.750000 |
2 |
Correct |
117 ms |
89904 KB |
Output is correct - P = 2.437500 |
3 |
Correct |
113 ms |
89904 KB |
Output is correct - P = 2.484848 |
4 |
Correct |
119 ms |
89904 KB |
Output is correct - P = 3.300000 |
5 |
Correct |
127 ms |
89904 KB |
Output is correct - P = 3.850000 |
6 |
Correct |
128 ms |
89904 KB |
Output is correct - P = 4.031746 |
7 |
Correct |
131 ms |
89904 KB |
Output is correct - P = 4.093750 |