开始 2023-12-19 22:53:18

【2024省选前】20231219更正

结束 2023-12-31 00:00:00
Contest is over.
当前 2025-02-23 07:00:00

T3
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std;
const LL P=2000000000000000LL;
LL ansx,ansy;
bool flag;
void Change(LL x,LL y)
{
	if(flag||(abs(x)+abs(y)!=abs(ansx)+abs(ansy)?abs(x)+abs(y)<abs(ansx)+abs(ansy):x!=ansx?x>ansx:y>ansy))
		ansx=x,ansy=y,flag=0;
}
int n;
LL x[1005],y[1005];
bool ch[1005];
LL vx[1005];
int dx,dy;
LL lx,rx,ly,ry;
void Find(LL x,LL y)
{
	y=(x-y)/2;
	x=x-y;
	int cx=2-((x&1)^dx);
	int cy=2-((y&1)^dy);
	for(LL i=x-cx;i<=x+cx;i+=2)
		for(LL j=y-cy;j<=y+cy;j+=2)
			if(i+j<=rx&&i+j>=lx&&i-j<=ry&&i-j>=ly)
				Change(i,j);
}
#define X(i) ((x[i]&1)^dx^ch[i])
#define Y(i) ((y[i]&1)^dy^ch[i])
void Calc()
{
	ly=-P,ry=P;
	for(int j=1;j<=n;j++)
		if(X(j)!=Y(j))
		{
			if(X(j)^(x[j]+y[j]<rx))
				ry=min(ry,x[j]-y[j]);
			else
				ly=max(ly,x[j]-y[j]);
			if(ly>ry)
				return ;
		}
	Find(0,0);
	Find(lx,lx);Find(lx,-lx);Find(rx,rx);Find(rx,-rx);
	Find(ly,ly);Find(-ly,ly);Find(ry,ry);Find(-ry,ry);
	Find(lx,ly);Find(lx,ry);Find(rx,ly);Find(rx,ry);
}
void Work()
{
	int N=0;
	for(int i=1;i<=n;i++)
		if(X(i)!=Y(i))
			vx[++N]=x[i]+y[i];
	sort(vx+1,vx+1+N);
	N=unique(vx+1,vx+1+N)-vx-1;
	lx=-P;
	for(int i=1;i<=N;i++)
	{
		rx=vx[i];
		Calc();
		lx=rx;
	}
	rx=P;
	Calc();
}
#undef X
#undef Y
char s[15];
int main()
{
  freopen("square.in", "r", stdin);
  freopen("square.out", "w", stdout);
	int T;
	scanf("%d",&T);
	for(int testcase=1;testcase<=T;testcase++)
	{
		scanf("%d",&n);
		static bool F[2][2];
		F[0][0]=F[1][0]=F[0][1]=F[1][1]=flag=1;
		for(int i=1;i<=n;i++)
		{
			scanf("%lld%lld%s",&x[i],&y[i],s);
			ch[i]=s[0]=='.';
			F[(x[i]&1)^ch[i]][(y[i]&1)^ch[i]]=0;
		}
		for(dx=0;dx<2;dx++)
			for(dy=0;dy<2;dy++)
				if(F[dx][dy])
					Work();
		printf("Case #%d: ",testcase);
		if(flag)
			puts("Too damaged");
		else
			printf("%lld %lld\n",ansx,ansy);
	}
}

admin  •  1年前

比赛已结束。