传送门。
题意
一个 $N\times N $ 的矩形,有从四周往内望去的第一个位置的距离,问是否存在一个矩形满足我们的观察。
分析
先说说我这个蒟蒻想出来的巨麻烦的方法。
首先先判断最简单的矛盾,就是左右穿插,上下穿插,这是第一步。
//-1 变成 n
for(int i=1; i<=n; ++i) if(L[i]+R[i]>=n) if(L[i]!=n||R[i]!=n) return puts("NE"),0;
for(int i=1; i<=n; ++i) if(U[i]+D[i]>=n) if(U[i]!=n||D[i]!=n) return puts("NE"),0;
第二步就是左右和上下之间的矛盾。
先从左边出发思考,我们在左边看到的这些黑格之前这一行一定不能出现节点,在黑格时,上下的两端应当将当前节点包裹,这就是第二步。
for(int i=1; i<=n; ++i) a[i]=<%L[i],i%>;
sort(a+1,a+n+1);
int now=1;
for(int i=1; i<=n; ++i) {
int id=a[i].id;
while(now<=L[id]) {
if(U[now]!=INF) vis[U[now]+1]=vis[n-D[now]]=1;
++now;
}
if(vis[id]) return puts("NE"),0;
int x=L[id]+1;
if((U[x]+1>id)||(id>n-D[x])) return puts("NE"),0;
}
然后就结束了,我的代码一共有 \(56\) 行,但是看了一眼这个大佬的题解,发现想麻烦了许多。
我们的黑点倘若出现了矛盾,那么必然会影响到其他的方向的值,那么直接将其他方向观察这个节点的影响求出,看是否矛盾即可。
代码就不贴了,看大佬博客即可。
标签:return,puts,int,题解,NE,2019,P7309,节点 From: https://www.cnblogs.com/djh0314/p/17997310