ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【NOI2020游记】NOI如何拿到部分分(详细揭秘)

2020-08-18 18:35:36  阅读:731  来源: 互联网

标签:... NOI 签到 T2 40 T1 NOI2020 揭秘 暴力


背景

省选day1T1爆零的情况下意外混进了省队(D类)。

做了往年的题,感觉自己实力确实不太够。比如说,2018年的签到题(kruskal重构树)和2019年的签到题(斜率优化),凭我自己的能力都无法做出(“思维”和“算法的积累”两方面来讲,都是题目难度>我的水平)。

2016和2017年的题,我倒是能做出一两道(比如2016的Day2T1“区间”和2017Day1T2的蚯蚓排队),但是也有签到题我做不出来(比如2016的Day1T1“优秀的拆分”我只会90分;2017的Day2T1“游戏”我只想到先\(3^d\)枚举再2-SAT,看了题解才知道可以优化为先\(2^d\)再2-SAT)。

上述列举的这些都是当年的“签到题”,更不必说更难的题了,我只能打打暴力。

事实上,按照往年的情况,如果做出了这些签到题,暴力不挂分的话,就能拿到银牌了。不过坏消息是签到题似乎一年比一年难了...


Day-1(8.16),Day0(8.17),大家都在一起快乐狼人杀。然后都被李曙查水表了。


试机的题是:NOI2019 Day1T2机器人,NOI2019 Day1T3 序列,NOI2019 Day2T3 I君的商店。

试机后,大家聊天的句式都是:“哎,明天会不会要考xxx啊,如果考xxx我就没了啊...。我没了啊...”。其中“xxx”可以是任何一种我听都没听过的算法,可能已经远高于历年NOI的难度了,我不知道大家为什么都要这么说...。是为了搞别人心态吗?还是为了显示自己听过别人不知道的算法呢?

哎,可能大家只是习惯性地假...


晚上李曙给我嘱咐了几句:两天都会各有一道签到题,争取拿到70分。剩下的题每道题打30分暴力。每天130分,就能稳拿Ag了。

正好我的目标也是拿到Ag。所以对这番分析深以为然。

Day1

\(50+32+40=122\)

昨晚10点就睡了,半夜4:19醒了一次,又睡到6:40自然醒起床。可以说睡眠是很充足的,考试时精神也很好。上午考试前李曙给我们拍了个合照,本来我和djq站在一起,然后李曙一波安排,我就和dxm换了位置(你品,你细品 /滑稽)。


本着先在签到题拿高分的想法,我先看T1。是个图论题,而且没什么想法(我好像经常对图论题毫无思路...,无论这题本身是什么难度...)。我想是不是以1为根,搜出dfs树,然后看有没有环?然后对环做背包?看上去很奇怪,于是先看T2。

T2虽然题面很长,但看下来倒是觉得非常自然,也很好懂。看到前几个点\(m\)很小,一下就能想到做容斥。我粗略地以为时间复杂度是\(O(2^m\cdot \text{poly}(m))\),然后以为自己能拿到40分。然后就继续去看T3了。此时时间大概是8:18。

T3是个“很多维数点”...。看起来是个数据结构题。\(O(nm\log n)\)是很简单的(考完后听别人一说才想到,做个二维前缀和就变成\(O(nm)\)了。不过得分是一样的,所以也不重要,只是体现了我智商很低...)。部分分A(\(c_1=1,c_2=n\)),我想了想,离线?树套树?分治?貌似都不对。好像可以莫队,不过是\(O((n+m)\sqrt{n}\log {n})\)的,不知道能不能过\(10^5\)...。没太多想,就先去写T2暴力了。


先写了个\(O(2^n)\)暴力。因为后面不管些什么都可以用它拍。写完这个9:06。然后继续写“\(O(2^m\cdot \text{poly}(m))\)暴力”。发现自己一开始想错了,这个暴力并不是\(O(2^m\cdot \text{poly}(m))\)而是\(O(2^m\cdot n)\)。可能只能拿20分,这就要低于李曙给我定的计划了。于是又进一步想想,发现可以用树链剖分优化到\(O(2^mm\log^2n)\),期望拿到32分。虽然比之前以为的40分低了一些,但还是达到了李曙说的30分。

T2似乎后面还能再搞一个树形DP:\(dp[i][j]\)表示第\(i\)个点向上的前\(j\)条边里必须至少有一个重要边。我不太清楚它是\(O(n^2)\)还是\(O(n^3)\)的,不过应该还能再拿到一些分。但是看分不多我又不是很确定,就先没写这个。决定稳妥一点,先写T1,T3暴力,最后再写这个DP。此时9:52(毕竟写树链剖分还是要花不少时间的)。


再看T1,首先发现我原来那个“找出所有环然后做背包”的思路彻底假了,因为环的数量可以是指数级的。不过很快惊喜地发现可以直接在图上做DP:设\(dp[i][j]\)表示第\(i\)天到达节点\(j\),能获得的最大收益。转移直接枚举出边即可。时间复杂度\(O(T(n+m))\)。可以得到40分。然后又发现下面两点:图是一个环的部分分很简单,于是写了。

现在是10:44,T1总共有50分。感觉不错,先去上了个厕所。此时想到,\(T\)这么大,应该是矩阵快速幂。不过10秒钟后,我把自己否决了。我在草稿纸上写下:矩阵快速幂(x):max不能矩乘。考完试才知道是我naive了。哎,完美地记录了我的无知...


虽然T1没拿到预期的70分,不过我看没有除快速幂外的其他思路,就没有继续纠结,转而去写T3部分分。\(O(nm\log n)\)的部分分就是用树状数组维护,非常好写。部分分A,我思考以后发现分治、树套树,这些似乎都不靠谱,于是尝试去写sqrt log的莫队。写完以后一测大样例,没过!我又对拍了小数据,才发现是我树状数组写错了。简而言之就是,改变了不该改变的参数,偷懒没有使用替身变量导致的错误(都是平时习惯不好,如果函数都写const int& 就没这个问题了)。又自己造了一组\(10^5,2\times10^5\)的随机数据,实测3.2s左右,感觉能过(下午查分发现只跑了1.8s)。

搞完这些,已经12:15了。这时候我发现一个大问题,T1的对拍的时候,因为一些不熟悉linux系统而导致的错误,我的程序其实没拍上...。修正了这个错误后,我重新对拍了T1,T2。T2过拍了。T1却没有过。(一开始搞错了,以为两个都没有过。反正那2分钟还挺刺激的)。好在发现T1是个小错误,改了就好了。

12:40左右试图开始写T2的树形DP部分分。但是时间不够了,没写完。最后就检查了一下文件啥的,提交提交,就结束了。


嗯。整个过程大概就是这样了。虽然分比同学低不少,但是没有挂分。又想到我的同学都是集训队水平,所以我感觉,也还行?然后李曙又笑嘻嘻地说不错不错(虽然他和谁都这么说),所以我还挺开心的。


总结反思?还没细想,以后再更吧。

标签:...,NOI,签到,T2,40,T1,NOI2020,揭秘,暴力
来源: https://www.cnblogs.com/dysyn1314/p/13525041.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有