把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 P7309 [COCI2018-2019#2] Kocka

传送门

题意

一个 N×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 行,但是看了一眼这个大佬的题解,发现想麻烦了许多。

我们的黑点倘若出现了矛盾,那么必然会影响到其他的方向的值,那么直接将其他方向观察这个节点的影响求出,看是否矛盾即可。

代码就不贴了,看大佬博客即可。

posted @   djh0314  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示