题解:CF2157B Expansion Plan 2
Hog_Dawa_IOI · · 题解
题目大意
一个无限大的网格,一开始只有
- 如果该字符串第
i 位是4 ,那么与黑方块四连通的方块都会变为黑色。 - 否则,与黑方块八连通的方块都会变为黑色。
“四连通”指的是上下左右,“八连通”则不仅有上下左右,还有左上角、左下角、右上角、右下角四个角。
最后问你坐标
解法
画图手玩样例后可发现,最后形成的图是一个正方形,且四个角被挖去了。
正方形的“半径”就是
我们研究四个角有什么性质。它有点像一个“阶梯”,而高度(和宽度)为数字
为什么?一个数字
于是判断
#include<stdio.h>
int t,n,x,y,cnt;char s[200005];
int abs(int x){return x>0?x:-x;}
int main()
{
scanf("%d",&t);while(t--)
{
scanf("%d%d%d%s",&n,&x,&y,s+1),cnt=0;
for(int i=1;i<=n;i++) cnt+=(s[i]=='4');
if(abs(x)>n||abs(y)>n)
{printf("NO\n");continue;}
int xx=-n,yy=-n;
if(x-xx+y-yy<cnt)
{printf("NO\n");continue;}
xx=n,yy=-n;
if(xx-x+y-yy<cnt)
{printf("NO\n");continue;}
xx=-n,yy=n;
if(x-xx+yy-y<cnt)
{printf("NO\n");continue;}
xx=n,yy=n;
if(xx-x+yy-y<cnt)
{printf("NO\n");continue;}
printf("YES\n");
}
}