Submission #12953

# Submission time Handle Problem Language Result Execution time Memory
12953 2015-01-21T12:34:34 Z gs13068 Watching (JOI13_watching) C++
0 / 100
4 ms 16780 KB
#include<cstdio>
#include<algorithm>

long long c[2002];
int x[2002];
int y[2002];
int d[2002][2002];

int main()
{
	int l,r,mid;
	int i,j,k,n,a,b;
	scanf("%d%d%d",&n,&a,&b);
	if(a+b>=n)
	{
		puts("1");
		return 0;
	}
	for(i=1;i<=n;i++)scanf("%lld",&c[i]);
	std::sort(c+1,c+n+1);
	l=1;
	r=(1e9+a+b+b-1)/(a+b+b);
	for(i=0;i<=n&&i<=a;i++)for(j=0;i+j<=n&&j<=b;j++)d[i][j]=1;
	while(l<r)
	{
		mid=(l+r)/2;
        for(i=1;i<=n;i++)
		{
			x[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid)-c;
			y[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid+mid)-c;
		}
		x[n+1]=y[n+1]=n+1;
		for(i=0;i<=n&&i<=a;i++)
		{
			for(j=0;i+j<=n&&j<=b;j++)
			{
				if(d[i][j]>n)break;
				d[i+1][j]=std::max(d[i+1][j],x[d[i][j]]);
				d[i][j+1]=std::max(d[i][j+1],y[d[i][j]]);
				d[i][j]=1;
			}
			if(i+j<=n&&j<=b)break;
		}
        if(i<=n&&i<=a)r=mid;
        else l=mid+1;
        for(k=j+1;i+k<=n&&k<=b;k++)d[i][k]=1;
        i++;
        for(k=0;i+k<=n&&k<=j;k++)d[i][k]=1;
	}
	printf("%d",l);
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 16780 KB Output is correct
2 Correct 0 ms 16780 KB Output is correct
3 Incorrect 0 ms 16780 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 4 ms 16780 KB Output is correct
2 Correct 0 ms 16780 KB Output is correct
3 Correct 0 ms 16780 KB Output is correct
4 Correct 0 ms 16780 KB Output is correct
5 Correct 0 ms 16780 KB Output is correct
6 Correct 0 ms 16780 KB Output is correct
7 Incorrect 0 ms 16780 KB Output isn't correct
8 Halted 0 ms 0 KB -