- 本篇文章写于 2018.11.11 NOIP day2 结束后。
- 在程序和评测结果都没拿到的时候写这个算是很有勇气了。
- 期望得分:
- 在成绩出来之前只希望不要挂分严重。
- 希望能稳进
THUWC
。
- update (11.14):
- 拿到程序心态稍微稳健了一点……
- 洛谷、牛客自测数据:
- 和估分真是……太近了……
- 不过好像……很多人比这个分数高……
- 水平还是不够……
不知道 CCF 的少爷机能不能把我测高一点。
- update(11.16):
- 好的今天有空测了一下 D2T1 TLE 的那几个点,大概跑了 8~9s,心情简单。
- 没戏了没戏了。
- 估计 CCF 的少爷机也救不了我。
- update(11.20):
- 初测成绩出来了:
- 最后一题多了一点,运气真好……
- 听说一堆人 530+,凉了凉了……
Day 0
- 下午来福建师大附中试机。
- 写了个
Splay
调不出来,药丸。 - 晚上到处乱逛,找学长谈♂了谈♂人生就很早睡觉了。
Day 1
- 大早上六点半自然醒,感到十分
excited
。 - 进了考场后仍旧十分
excited
。 - 看完 T1,诶这不是水死了,怎么做都行。当时脑子里没有具体思路,但是觉得很水就往下看了。
- 想了想发现可以直接预处理
RMQ
,然后写一个笛卡尔树。
- 看完 T2,诶这不是裴蜀定理?再往下看,要求系数非负,感到不可做。
- 看完 ,内心毫无波澜。
- 然后愣了几分钟发现,我只要把那些能被其他数表示出来的数删掉就好了。
- 然后发现 能过。
- 那
sort
一下做个 sb 背包不就没了。
- 看完 T3,脑子里毫无思路,只有一个二分 + check的方向,可惜不知道怎么 check。
- 根据以往经验,先用了 1min 想了想 55pts 的一眼部分分。
- 只分析出,对于每个点考虑过这个点的路径,这些路径大概可以分成以这个点为
lca
、和从这个点向上延伸几种可能。 - 然后上了上厕所。脑子里闪过了一些奇怪的树分治、树形 DP、倍增什么的不可靠做法。
- 然后坐下来冷静了许久,还是不会。
- 难道今天就要
255
滚粗了? - 不对呀?既然每个点最多一条路径向上延伸,我们只要保证这个结点的子树的合法路径数尽量多的前提下,这条可延伸的路径尽量长不就行了?
- 然后就想着从下往上贪心。对于每个结点的子节点延伸上来的路径,
sort
一下然后从小往大,对于每条路径,二分找到第一个最小的合法路径合并,这样保证上面两个最优。 - 好像还行。开始码码码。10:30 大概码完。
- 希望别出锅。
- (感觉策略比较保守,其实我 1h 就可以 ak day1)
- (然后发现电脑上扫雷和 chrome 应有尽有,开始颓扫雷和小恐龙)
- 出来发现全世界都 ak 了,原来 T1
for
一遍就没了呀。 - 自己根本没意识到三道都是原题,对于三道原题的事情,不做评价。
感觉 day1 区分度过于差劲。 - 希望不挂分。
- 晚上又写了个
Splay
,又没调出来,带着坦然的心态很早又睡了……
Day 2
奶 day2 会很难,果然奶中。- 开题发现这个 T1 一眼不可做。看了 ,并且是连通图,我就意识到是一个树/基环树题。
- 认真读完题发现就是要求一个原图的
dfs
树,使得这个dfs
树的前序遍历字典序最小。 - 显然对于
,原图就是
dfs
树,然后以 为根贪心即可。 - 对于
,我脑子里当时想的就是枚举哪一条边不在
dfs
树,然后按照上面的情况处理,时间复杂度是 的,感觉很稳就没判环在哪里,为了正确性写得就很保守(为 gg 埋下伏笔)。 - 感觉线性也可做但是不管了。
- 然后就开始码码码。
- 大概费了四十几分钟。上了个厕所冷静一下回来看 T2。
- 开 T2,发现好像条件就是不允许这种情况:
- 那我只要记最后填的那一列的状态,然后一列一列填,写个状压?
- 算了算,转移矩阵大概是 ,最后矩乘优化然后卡卡常?
- 为了求稳先去写了个暴力状压。
- 发现 的样例输出 ,药丸。
- 查了半天没查出来。
- 心态崩了去写
dfs
,并且用上面的条件判,发现两个程序都输出 。 - 真是药丸。
- 这时候差不多 9:30。
- 根据经验我决定再看一眼题。
- 看了许久举出了反例。大概是:
- 这个就不符合上面的条件。
- 然后看了许久发现如果出现下面这样:
- 黄色部分有两个一样的,那么右下方绿色部分应当满足,从右上到左下的每条 45° 的斜线,均需要满足这条斜线上填的数均要一样,大概反证法证明了必要性。
- 似乎找不到什么反例了。
- 那么我就把
dfs
和状压DP
都加上了这个条件,那么状压还要加一维表示目前绿色部分最上面到第几行。 - 结果……
- 样例是过了,但是我给两个程序试了
的数据,
dfs
输出 ,状压DP
输出 。 - 怕不是凉死了。
- 这时候已经 10:30,还有 90min 左右,T3 还没看,内心慌得一匹。
- 看了眼 T3,赶紧码了个 分 暴力,然后发现看错 T3。
- 题目要求每条边的两个端点至少选一个,我看成一个点要么自己选,要么相邻的选出一个。
- 内心:mmp 今天不会 滚粗了吧。
- 赶紧上了个厕所冷静一下。
- 大概 11:00 的时候,用尽各种输出调试的我,终于发现 T2
dfs
写挂了,内心 mmp,不过这种情况我也遇到不少。赶紧改过来,终于和状压DP
对上了,又试了一些小数据。 - 算了一下可以拿 80,发现转移矩阵是 ,这 tm 搞个**。
- 后来发现,要是没想清楚,这题可以两个做法一起爆零。开始恐惧。
- 但是只能不管了,赶紧回来搞 T3,发现 T3 正确版本的暴力其实更好写,赶紧码码码救了回来。
- 然后剩下四十几分钟,发现链的部分分可以写个倍增,但是好像不好写(我当时怎么没想到写个线段树)。
- 结果没调出来,day2 只好 滚粗。
- 出来感觉大家都考不是很好。
- 听说
xyz32768
T3写了个倍增怒A,但是听他说过了大样例检查一遍就没管了,开始担心。可惜他 T2 80分DP
没调出来写了个 20,不然就虐场了。 - 进了两次集训队的大爷
InvUsr
也被 day2 搞自闭了,本来他有 288,结果 T2 正解写挂就弃疗了。不过他已经高三了没啥压力…… - 感觉自己算是还行,直到……
-
Log_x
:“完了我 T1 多了个log
!!!” -
好惨啊我心想。
-
不对……我是不是也 tm 多了一个
log
。 -
仔细回想一下,我代码好像差不多长下面这样:
bool vis[MaxN];
void dfs(int u)
{
...
vis[u] = true;
std::vector<int> seq;
seq.clear();
for (edge e: u->v)
if (!vis[v]&&...)
seq.push_back(v);
std::sort(seq.begin(), seq.end());
...
}
int main()
{
...
for (int i = 1; i <= m; ++i)
{
...
dfs(1);
...
}
}
- 这 tm 是 的啊……
- 然后我 tm 开启自闭模式。我 tm 干嘛以为自己 T1 稳了就不去造极限数据。
- 极限数据不难造的题写完正解最好造出来跑一下。
- 后来发现差不多要丢掉三个点。 。
- 不过听说新评测机跑挺快,看运气吧。
- 不过只是小挂就好了。
- 希望不要大挂。