#include <bits/stdc++.h>
#include "encoder.h"
#include "encoderlib.h"
using namespace std;
typedef long long ll;
static const int S=20;
static ll C[2*S+1][2*S+1];
static void ini()
{
for(int i=0;i<=2*S;i++) C[i][0]=1;
for(int i=1;i<=2*S;i++) for(int j=1;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];
}
static ll opt(int n,int m){return C[n+m-1][n];}
array<int,16> enc(array<int,4> a,int cnt)
{
reverse(a.begin(),a.end());
ll b=0;
for(int i=0;i<4;i++) b=(b<<8)+a[i];
array<int,16> c;
c.fill(0);
for(int i=0;i<16;i++)
{
while(cnt>0&&opt(cnt,16-i)<=b)
{
b-=opt(cnt,16-i);
c[i]++;
cnt--;
}
}
assert(b==0);
return c;
}
void encode(int N,int M[])
{
ini();
for(int i=0;i<N;i+=4)
{
array<int,4> a;
a.fill(0);
for(int j=0;j<4&&i+j<N;j++) a[j]=M[i+j];
array<int,16> c=enc(a,5*min(4,N-i));
for(int j=0;j<16;j++) for(int k=0;k<c[j];k++) send(((i>>2)<<4)+j);
}
}
#include <bits/stdc++.h>
#include "decoder.h"
#include "decoderlib.h"
using namespace std;
typedef long long ll;
static const int S=20;
static ll C[2*S+1][2*S+1];
static void ini()
{
for(int i=0;i<=2*S;i++) C[i][0]=1;
for(int i=1;i<=2*S;i++) for(int j=1;j<=i;j++) C[i][j]=C[i-1][j]+C[i-1][j-1];
}
static ll opt(int n,int m){return C[n+m-1][n];}
array<int,4> dec(array<int,16> c,int cnt)
{
ll b=0;
for(int i=0;i<16;i++)
{
while(c[i]--)
{
b+=opt(cnt,16-i);
cnt--;
}
}
array<int,4> a;
for(int i=3;i>=0;i--)
{
a[i]=(b&255);
b>>=8;
}
reverse(a.begin(),a.end());
return a;
}
void decode(int N,int L,int X[])
{
ini();
vector<array<int,16>> v(N);
for(int i=0;i<N;i++) v[i].fill(0);
for(int i=0;i<L;i++)
{
int x=X[i];
v[(x>>4)<<2][x&15]++;
}
for(int i=0;i<N;i+=4)
{
array<int,4> a=dec(v[i],5*min(4,N-i));
for(int j=0;j<4&&i+j<N;j++) output(a[j]);
}
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
652 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
1040 KB |
Output is correct |
2 |
Correct |
2 ms |
1012 KB |
Output is correct |
3 |
Correct |
2 ms |
1040 KB |
Output is correct |
4 |
Correct |
2 ms |
1040 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
1040 KB |
Output is correct |
2 |
Correct |
2 ms |
1036 KB |
Output is correct |
3 |
Correct |
2 ms |
1012 KB |
Output is correct |
4 |
Correct |
2 ms |
1052 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1032 KB |
Output is correct |
2 |
Correct |
3 ms |
1044 KB |
Output is correct |
3 |
Correct |
3 ms |
1056 KB |
Output is correct |
4 |
Correct |
3 ms |
1184 KB |
Output is correct |
5 |
Correct |
3 ms |
1192 KB |
Output is correct |
6 |
Correct |
5 ms |
1184 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
1040 KB |
Output is correct - P = 5.000000 |
2 |
Correct |
3 ms |
1192 KB |
Output is correct - P = 4.937500 |
3 |
Correct |
4 ms |
1188 KB |
Output is correct - P = 4.969697 |
4 |
Correct |
6 ms |
1312 KB |
Output is correct - P = 4.860000 |
5 |
Correct |
7 ms |
1348 KB |
Output is correct - P = 4.850000 |
6 |
Correct |
6 ms |
1348 KB |
Output is correct - P = 4.888889 |
7 |
Correct |
6 ms |
1328 KB |
Output is correct - P = 4.875000 |