题解 P7309 [COCI2018-2019#2] Kocka
1.题解 P7763 [COCI2016-2017#5] Ronald2.题解 P6497 [COCI2016-2017#2] Prosječni3.题解 P7537 [COCI2016-2017#4] Rima4.题解 P8017 [COCI2013-2014#4] UTRKA5.题解 P7751 [COCI2013-2014#2] PUTNIK6.题解 P7752 [COCI2013-2014#2] PALETA7.题解 P7586 [COCI2012-2013#1] SNAGA8.题解 P6485 [COCI2010-2011#4] PROSJEK9.题解 P6447 [COCI2010-2011#1] ŽABE10.题解P6677 [COCI2019-2020#2] Checker11.题解P8073 [COCI2009-2010#7] BAKICE12.题解P8084 [COCI2011-2012#4] BROJ13.题解P6370 [COCI2006-2007#6] KAMEN14.题解 P7165 [COCI2020-2021#1] Papričice15.题解 P9911 [COCI 2023/2024 #2] Kuglice16.题解 P6356 [COCI2007-2008#3] CUDAK
17.题解 P7309 [COCI2018-2019#2] Kocka
18.题解 P6548 [COCI2010-2011#2] IGRA19.题解 P6491 [COCI2010-2011#6] ABECEDA传送门。
题意
一个
分析
先说说我这个蒟蒻想出来的巨麻烦的方法。
首先先判断最简单的矛盾,就是左右穿插,上下穿插,这是第一步。
//-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; }
然后就结束了,我的代码一共有
我们的黑点倘若出现了矛盾,那么必然会影响到其他的方向的值,那么直接将其他方向观察这个节点的影响求出,看是否矛盾即可。
代码就不贴了,看大佬博客即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!