比赛地址
https://gmoj.net/senior/#contest/home/3251
题目
T1:无尽之前 (game)
T2:鬼渊传说(village)
T3:终末作战(fight)
T4:铲雪(snow)
总结
又炸了。
T1
一眼看上去是一道分类讨论题。
显然只有4种放兵的思路:
- 在起点把车堵住;
- 把行堵住;
- 把列堵住;
- 在终点防住车。
先考虑最简单的第2、3种。
假设现在要堵住一行,可以发现不用在整一行上都放兵,只用这样放就好了:XX.XX.XX.XXX
,注意第一个和最后一个必须是X
,车所在的列必须是X
。假设这一行的长度是
l
l
l,那么要放的兵数为
l
−
⌊
l
−
1
3
⌋
l-\left\lfloor\frac{l-1}{3}\right\rfloor
l−⌊3l−1⌋。
注意当
n
=
1
n=1
n=1或
m
=
1
m=1
m=1时,要放2个兵(我在这里挂了)。
现在考虑第1种。
-
当车在某一个角上时,显然可以用3个兵把它堵死;
-
还可以这样不计成本地堵住车(用S表示车,T表示终点):
但是要保证T不与S在同一个区域内。
-
对于任意的T,还可以把它的上下左右外加两个对角堵上:
最后考虑第4种:
- 最普通的方法,把终点的上下左右中的三个方向堵上,再在终点上放一个兵;
- 若终点在角落,且满足行、列都与起点和它上下左右剩余的两个方向都不相同,可以用2个兵防住。
然而这样还是漏了好多种情况……
其实我这里有好多情况都是没用的,因为答案最大为3。
按照答案的数值分类讨论就会好很多(毕竟没有无用的情况了),这就是题解做法。
T2
看到空腔什么的,很容易想到先把一个白色的连通块找出来,然后在它周围放上一圈黑色点,包含这个图形的最小矩阵以及包含这个最小矩阵的子矩阵就一定不能选。
但是判断一个图形内有几个四联通块让我迷茫。
最后勉强写完了暴力,交上去WA 0了……
T3
推测题目中的序列等价于把长度为n的块分为k+1个连续的上升或下降的子序列,且要求子序列中相邻数字的数值的差的绝对值为1。
然后盲猜 k = 1 k=1 k=1的数据中答案为 2 n 2n 2n( n = 1 n=1 n=1时答案为1)
结果WA 0了……
T4
觉得是树链剖分之类
log
2
\log^2
log2的算法,但是并不会做。
感觉部分分太少就没有拿了(什么?原来50分那么容易拿……)
总结
这次模拟赛真实模拟了NOIP,难度、算法等都很符合NOIP的特点。
主要反映出来的问题主要有:
- T1这种细节题考虑不周全,应该只从有用的方面入手;
- 部分分不积极获取。其实只要仔细想,T4还是有可能拿到50分的;