Submission #64826

# Submission time Handle Problem Language Result Execution time Memory
64826 2018-08-05T18:06:51 Z TadijaSebez Parrots (IOI11_parrots) C++11
100 / 100
550 ms 236160 KB
#include "encoder.h"
#include "encoderlib.h"
#include <stdio.h>
#include <algorithm>
using namespace std;
const int sz=90;
const int H=576;
struct Number
{
	int a[sz];
	void init(){ for(int i=0;i<sz;i++) a[i]=0;}
	Number(){ init();}
	Number operator + (Number b) const
	{
		Number c;c.init();
		for(int i=0;i<sz;i++)
		{
			c.a[i]+=a[i]+b.a[i];
			if(c.a[i]>255) c.a[i]-=256,c.a[i+1]++;
		}
		return c;
	}
	bool operator < (Number b) const
	{
		int i;
		for(i=sz-1;~i;i--)
		{
			if(a[i]<b.a[i]) return 1;
			if(b.a[i]<a[i]) return 0;
		}
		return 0;
	}
} binom[H][H];
bool done=0;
void encode(int n, int *m)
{
	int i,j;
	if(!done)
	{
		for(i=0;i<H;i++) for(j=0;j<H;j++) binom[i][j].init();
		for(i=1;i<H;i++)
		{
			binom[i][0].a[0]=1;
			for(j=1;j<=i;j++)
			{
				binom[i][j]=binom[i-1][j-1]+binom[i-1][j];
			}
		}
		done=1;
	}
	Number my;my.init();
	for(i=0;i<n;i++) my.a[i]=m[i];
	Number sub;sub.init();
	int go=5*n+255;
	for(i=0;i<n*5;i++)
	{
		while(my<(binom[go][5*n-i]+sub)) go--;
		send(5*n+255-go-1-i);
		sub=sub+binom[go][5*n-i];
		go--;
	}
}
#include "decoder.h"
#include "decoderlib.h"
#include <stdio.h>
#include <algorithm>
using namespace std;
const int sz=90;
const int H=576;
struct Number
{
	int a[sz];
	void init(){ for(int i=0;i<sz;i++) a[i]=0;}
	Number(){ init();}
	Number operator + (Number b) const
	{
		Number c;c.init();
		for(int i=0;i<sz;i++)
		{
			c.a[i]+=a[i]+b.a[i];
			if(c.a[i]>255) c.a[i]-=256,c.a[i+1]++;
		}
		return c;
	}
	bool operator < (Number b) const
	{
		int i;
		for(i=sz-1;~i;i--)
		{
			if(a[i]<b.a[i]) return 1;
			if(b.a[i]<a[i]) return 0;
		}
		return 0;
	}
} binom[H][H];
bool done=0;
void decode(int n, int l, int *m)
{
	int i,j;
	if(!done)
	{
		for(i=0;i<H;i++) for(j=0;j<H;j++) binom[i][j].init();
		for(i=1;i<H;i++)
		{
			binom[i][0].a[0]=1;
			for(j=1;j<=i;j++)
			{
				binom[i][j]=binom[i-1][j-1]+binom[i-1][j];
			}
		}
		done=1;
	}
	Number my;my.init();
	sort(m,m+l);
	for(i=0;i<l;i++)
	{
		int x=m[i];
		int go=5*n+255-x-i-1;
		my=my+binom[go][5*n-i];
	}
	for(i=0;i<n;i++) output(my.a[i]);
}
# Verdict Execution time Memory Grader output
1 Correct 396 ms 234500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 421 ms 235344 KB Output is correct
2 Correct 434 ms 235680 KB Output is correct
3 Correct 419 ms 235680 KB Output is correct
4 Correct 421 ms 235872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 454 ms 235872 KB Output is correct
2 Correct 402 ms 235872 KB Output is correct
3 Correct 441 ms 236056 KB Output is correct
4 Correct 464 ms 236056 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 486 ms 236056 KB Output is correct
2 Correct 522 ms 236056 KB Output is correct
3 Correct 449 ms 236056 KB Output is correct
4 Correct 468 ms 236128 KB Output is correct
5 Correct 499 ms 236128 KB Output is correct
6 Correct 448 ms 236128 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 494 ms 236128 KB Output is correct - P = 5.000000
2 Correct 500 ms 236128 KB Output is correct - P = 5.000000
3 Correct 504 ms 236128 KB Output is correct - P = 5.000000
4 Correct 550 ms 236160 KB Output is correct - P = 5.000000
5 Correct 505 ms 236160 KB Output is correct - P = 5.000000
6 Correct 490 ms 236160 KB Output is correct - P = 5.000000
7 Correct 474 ms 236160 KB Output is correct - P = 5.000000