NOIP2018 滚粗记

  • 本篇文章写于 2018.11.11 NOIP day2 结束后。
  • 在程序和评测结果都没拿到的时候写这个算是很有勇气了。
  • 期望得分: 100 + 100 + 100 + 88 + 80 + 44 = 512 100+100+100+88+80+44=512
  • 在成绩出来之前只希望不要挂分严重。
  • 希望能稳进 THUWC

  • update (11.14):
  • 拿到程序心态稍微稳健了一点……
  • 洛谷、牛客自测数据: 100 + 100 + 100 + 88 + 80 + 44 = 512 100+100+100+88+80+44=512
  • 和估分真是……太近了……
  • 不过好像……很多人比这个分数高……
  • 水平还是不够……
  • 不知道 CCF 的少爷机能不能把我测高一点。

  • update(11.16):
  • 好的今天有空测了一下 D2T1 TLE 的那几个点,大概跑了 8~9s,心情简单。
  • 没戏了没戏了。
  • 估计 CCF 的少爷机也救不了我。

  • update(11.20):
  • 初测成绩出来了: 100 + 100 + 100 + 88 + 80 + 52 = 520 100+100+100+88+80+52=520
  • 最后一题多了一点,运气真好……
  • 听说一堆人 530+,凉了凉了……

Day 0

  • 下午来福建师大附中试机。
  • 写了个 Splay 调不出来,药丸。
  • 晚上到处乱逛,找学长谈♂了谈♂人生就很早睡觉了。

Day 1

  • 大早上六点半自然醒,感到十分 excited
  • 进了考场后仍旧十分 excited
  • 看完 T1,诶这不是水死了,怎么做都行。当时脑子里没有具体思路,但是觉得很水就往下看了。
  • 想了想发现可以直接预处理 RMQ,然后写一个笛卡尔树。

  • 看完 T2,诶这不是裴蜀定理?再往下看,要求系数非负,感到不可做。
  • 看完 a i 25000 a_i\le 25000 ,内心毫无波澜。
  • 然后愣了几分钟发现,我只要把那些能被其他数表示出来的数删掉就好了。
  • 然后发现 O ( T n max { a i } ) O(Tn\max\{a_i\}) 能过。
  • 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 一眼不可做。看了 m = n 1  or  m = n m=n-1 \text{ or }m=n ,并且是连通图,我就意识到是一个树/基环树题。
  • 认真读完题发现就是要求一个原图的 dfs 树,使得这个 dfs 树的前序遍历字典序最小。
  • 显然对于 m = n 1 m=n-1 ,原图就是 dfs 树,然后以 1 1 为根贪心即可。
  • 对于 m = n m=n ,我脑子里当时想的就是枚举哪一条边不在 dfs 树,然后按照上面的情况处理,时间复杂度是 O ( n m ) O(nm) 的,感觉很稳就没判环在哪里,为了正确性写得就很保守(为 gg 埋下伏笔)。
  • 感觉线性也可做但是不管了。
  • 然后就开始码码码。
  • 大概费了四十几分钟。上了个厕所冷静一下回来看 T2。

  • 开 T2,发现好像条件就是不允许这种情况:
  • 那我只要记最后填的那一列的状态,然后一列一列填,写个状压?
  • 算了算,转移矩阵大概是 256 × 256 256\times 256 ,最后矩乘优化然后卡卡常?
  • 为了求稳先去写了个暴力状压。
  • 发现 3   3 3~3 的样例输出 144 144 ,药丸。
  • 查了半天没查出来。
  • 心态崩了去写 dfs,并且用上面的条件判,发现两个程序都输出 144 144
  • 真是药丸。
  • 这时候差不多 9:30。
  • 根据经验我决定再看一眼题。
  • 看了许久举出了反例。大概是:
    1541939428123
  • 这个就不符合上面的条件。
  • 然后看了许久发现如果出现下面这样:
    在这里插入图片描述
  • 黄色部分有两个一样的,那么右下方绿色部分应当满足,从右上到左下的每条 45° 的斜线,均需要满足这条斜线上填的数均要一样,大概反证法证明了必要性。
  • 似乎找不到什么反例了。
  • 那么我就把 dfs 和状压 DP 都加上了这个条件,那么状压还要加一维表示目前绿色部分最上面到第几行。
  • 结果……
  • 样例是过了,但是我给两个程序试了 3   4 3~4 的数据,dfs 输出 360 360 ,状压 DP 输出 336 336
  • 怕不是凉死了。
  • 这时候已经 10:30,还有 90min 左右,T3 还没看,内心慌得一匹。

  • 看了眼 T3,赶紧码了个 44 44 O ( n m ) O(nm) 暴力,然后发现看错 T3。
  • 题目要求每条边的两个端点至少选一个,我看成一个点要么自己选,要么相邻的选出一个。
  • 内心:mmp 今天不会 120 120 滚粗了吧。
  • 赶紧上了个厕所冷静一下。

  • 大概 11:00 的时候,用尽各种输出调试的我,终于发现 T2 dfs 写挂了,内心 mmp,不过这种情况我也遇到不少。赶紧改过来,终于和状压 DP 对上了,又试了一些小数据。
  • 算了一下可以拿 80,发现转移矩阵是 2048 × 2048 2048\times 2048 ,这 tm 搞个**。
  • 后来发现,要是没想清楚,这题可以两个做法一起爆零。开始恐惧。

  • 但是只能不管了,赶紧回来搞 T3,发现 T3 正确版本的暴力其实更好写,赶紧码码码救了回来。
  • 然后剩下四十几分钟,发现链的部分分可以写个倍增,但是好像不好写(我当时怎么没想到写个线段树)。
  • 结果没调出来,day2 只好 100 + 80 + 44 100+80+44 滚粗。
  • 出来感觉大家都考不是很好。
  • 听说 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 是 O ( n m log m ) O(nm\log m) 的啊……
  • 然后我 tm 开启自闭模式。我 tm 干嘛以为自己 T1 稳了就不去造极限数据。
  • 极限数据不难造的题写完正解最好造出来跑一下。
  • 后来发现差不多要丢掉三个点。 s c o r e = 12 score -= 12
  • 不过听说新评测机跑挺快,看运气吧。
  • 不过只是小挂就好了。
  • 希望不要大挂。

猜你喜欢

转载自blog.csdn.net/qq_35811706/article/details/83830619