HNOI2019 游记

Day 0

其实考前几天,心里还是挺慌的。结果最后 Day 0 的时候,因为种种原因反而释然了。也许是觉得,在这一步退役,也没有什么好害怕的吧。

OI 本身就是一项偶然性太大的竞赛。也许在你遗憾失利的时候,还有更多比你强的选手倒在了省选前。

Day 1

拿到题之后,跳了计算几何与字符串,先开了相对擅长的计数。仔细分析了一下性质,发现大概是一个树的遍历的方案数。如果带修的话,因为修改的点数不多,大概可以暴力除掉原来的贡献,在乘上新的贡献就行了。

当时觉得乘上新的贡献的时候,要重新计算子树的大小,觉得细节有点多……当时决定,先写个 \(O(nm)\) 的暴力,最后看情况再改成 \(O(n \log n)\) 。大概 \(9\) 点的时候开始写代码,结果活生生调到了 \(11\) 点左右的时候才把暴力调出来……感觉再写下去会出事,赶紧扔了去看别的题。

回头看 T2,想了好一会怎么 \(\text{SAM}\) ,结果发现直接 \(\text{KMP}\) 就完事了……忽然意识到可能 \(\text{Undo}\) 一个 \(\text{Undo}\) 操作,还要建操作树,在操作树上跑 \(\text{KMP}\) 。写完之后,思考了一番满分做法,似乎可以把长度和字符视作一个二元组,对这个二元组再在操作树上跑 \(\text{KMP}\) ,特殊处理掉第一段,忽然觉得能做了,但是细节一大把……感觉不太能写了,于是赶紧扔了看 T1。

T1 上来写了个 \(O(n^6)\) ,想了一下后续,感觉都不是能在短时间内能拿分的玩意儿,拿了 \(20pts\) 直接溜了。

大概这个时候还剩下不到 \(1h\) ,手里还有 T2 和 T3 的正解,都不太能写。这个时候先尝试着写了分更多的 T2 ,仔细想了很久细节怎么处理,结果才写了没多久就觉得写不下去了……又看到了 T3。

冷静分析了一下 T3 更好写的写法,忽然发现,一条线段对应的子树大小,就是它的右端点 - 左端点 - 1。然后乘除组合数的时候,大部分的阶乘和阶乘逆元都抵掉了,最后只剩下乘两个数,除两个数。但是当修改连上了 \(n\) 号点和某个点的时候,还需要特判,最后的时候这个特判愣是没调过,就让它跑暴力去了……

出来的时候还觉得自己有 \(20 + 50 + rand(65,100)\) ,结果出来就发现 \(\text{KMP}\) 复杂度是均摊的……自己那个做法只有 \(20pts\) ,而那个所谓的正解也只能过没有 \(2\) 操作的点。想要通过总串长较小的点,还需要写个自动机一样的东西,这个东西拖到那个假做法上,字符集会很大,一下子不太会怎么搞。

结果最后出分 \(20 + 70 + 60 = 150\) 。T2 数据水的不行……真是服气……T3 \(\text{WA}\) 了俩\(\text{RE}\) 了一个,剩下的全 \(\text{TLE}\) 了。\(\text{WA}\) 是一个地方变量名打错了…… \(\text{RE}\) 是我直接把一个 \(\texttt{std :: deque}\) 赋值给另一个,结果好像不太能这么干?要先 \(\texttt{clear}\) 掉被赋值的哪一个,否则会出现随机 \(\text{RE}\) 。\(\text{TLE}\) 似乎就是被卡了……

Day 1 的分虽然还能看,但是打得很咸鱼……

Day 2

昨天仨取模,结果今天还有俩……行吧其实这种题还是挺适合我的。要是三个数据结构怕不是会被打爆……

先看了一下 T1,给我感觉是个签到,但我咋暴力都想了好久……写了一个记忆化搜索,开始还以为这个是 \(O(nm)\) 的,说不定 \(\texttt{bitset}\) 一发就过去了,结果仔细分析发现是 \(O(m^2)\) 的,这咋 \(\texttt{bitset}\) 啊……感觉不太对,先扔了看 T2。

T2 前 \(20\) 应该是暴力,后面保证了 \(k\) 是 \(2\) 的次幂,又满足 \(k | p - 1\) ,看上去比较循环卷积。仔细想了想,感觉可以写个矩乘 + \(\text{NTT}\) ,这样就有 \(60\) 了。后面都没保证 \(k\) 是 \(2\) 的次幂,这还能循环卷积?一脸被卡科技的感觉,于是去看 T3。

T3 盯着样例解释看了一会,不知道怎么就想到一个 \(O(nm)\) 的贪心,感性一波感觉正确性没啥问题,于是直接开写了。拍也没拍,不知道自己拿来的自信……

回头写 T2,忽然发现模数没给,并不知道原根怎么求……跟着感觉乱写了一个求原根,仔细想了想好像没啥问题?写完了矩乘 + NTT,忽然发现这个裸暴力我好像……不会写!想了好久,好像只会 \(O(L^2)\) ……当时不知道怎么回事,觉得这个裸暴力可能要写任意模数NTT……自己认为的签到题还只有裸暴力分,于是回头看 T1。

整个想 T1 的过程里,脑袋里全是 \(\texttt{bitset}\) ……根本没往优化建边的思路想。考试结束前尝试用各种数据来卡这个记忆化搜索,怎么卡也卡不掉……有点蒙……

估分 \(30 + 40 + 50 = 120\) ,出来问了一圈感觉好像不差,就是这个 T2 的裸暴力没写出来有点可惜……直接乘个组合数就行了,也不知道考场上脑袋抽了什么风……

结果最后出来 \(0 + 40 + 50 = 90\) 。我怎么又双叒叕挂分了……仔细想了想发现这个记忆化搜索好像是错的,这样有概率把 YES 判成 NO ……必须从合法状态开始 \(\texttt{bfs}\) 才是对的。

感觉自己这两天考得实在很咸鱼……不过好像很多人都挂了分,所以分都不怎么高。最后勉强混了个 A 队,看了圈 A 队名单,感觉自己 NOI 真的要 A 队垫底了……

Day \(\infty\)

又是一场考得比较崩的比赛,仔细回想起来,真的丢了太多不该丢的分。若不是数据水救了我一命,就只能排到 B 队中游了。Day1T3,Day2T1 和 Day2T2 都有不该丢的分,单单是写挂的分加起来也有 \(70\) 分了……究其原因,一方面自己写代码的时候,缺乏检查的过程,没有仔细分析正确性;另一方面,自己对于某些细节比较多的题,常常没有想清楚一些细节就直接开始写,导致花费了太多时间,甚至最后没能通过。像这个 Day1T3,如果我一上来仔细想想怎么写更好写,绝对是可以在 \(1.5h\) 以内写完的。

接下来的三个月,还有一些算法窟窿需要补,考试的准确率还需要训练,代码能力还需要提高,还有太多的事情要做……

NOI 不再容许我犯这么多的低级错误了,加油吧!

HNOI2019 游记的更多相关文章

  1. HNOI2019游记

    \(day~?\) 我们的老师告诉我说,你这次省选目标分:\(70\),拿不到,家法伺候.但其实,我的目标是不爆零!!! \(day~-1\) 这天晚上,我们的指导老师给我们试了一下ZJOI2019, ...

  2. 游记-HNOI2019

    Day -1 最后一场考试依旧没有ak(达成成就:\(\mathrm{OI}\) 生涯 AK 次数仅一次) Day 0 听dalao们说现在做题已经没有意义了,不如多口胡几道题,拓展视野 虽然很抗拒但 ...

  3. HNOI2019梦游记

    \(Day_0\) 十点半开始睡觉,开始了八个小时的不眠之夜,整晚都没睡着,这状态明天肯定挂了 \(Day_1\) 开局一条鱼,计算几何只会\(20\) 还是\(T2\)的\(20\)纯暴力好打,\( ...

  4. HNOI2019滚粗记

    HNOI2019滚粗记 标签: 游记 Day -1 在学校打摆被抓. Day 0 在家打摆. Day 1 来长沙理工大学打摆 开场看完题之后,感觉T3不太可做,然后T1T2又显得特别套路,然后把T2 ...

  5. ZJOI2019Day2余姚中学游记(4.23~4.26)

    前言 \(Day2\),又是一场噩梦. 前段时间去做了挺多十二省联考和\(HNOI2019\)的题目,还订正掉了\(Day1\)的\(T1\)和\(T2\)(\(T3\)动态\(DP\)完全不想订正啊 ...

  6. 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记

    先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...

  7. 【20160722-20160728】NOI2016滚粗记&&酱油记&&游记

    先挖坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.c ...

  8. NOIp2016 游记

    DAY -2 不要问我为什么现在就开了一篇博客. 本来想起个NOIp2016爆零记或者NOIp2016退役记之类的,但是感觉现在不能乱立flag了.所以就叫游记算了. 前几场模拟赛崩了一场又一场,RP ...

  9. NOIP2016游记

    只是游记而已.流水账. Day0:忘了. Day1:看完T1,本以为T2一如既往很简单,结果看了半天完全没有思路.然后看了一眼T3,期望,NOIP什么时候要考期望了,于是接着看T2.一开始我推的限制条 ...

随机推荐

  1. python中变量、函数、类名、模块名等命名方式

    摘要:模块名:小写字母,单词之间用_分割ad_stats.py包名:和模块名一样类名:单词首字母大写AdStatsConfigUtil全局变量名(类变量,在java中相当于static变量):大写字母 ...

  2. [2017BUAA软工助教]案例分析小结

    BUAA案例分析小结 一.作业要求 http://www.cnblogs.com/jiel/p/7631784.html 二.统计数据 总人数 神策数据 博客园博客 必应词典 30 1 12 17 三 ...

  3. Shell脚本1

    1Shell编程 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell脚本 Shell 脚本(shell scr ...

  4. html总结:float实现span和input输入框同行

    例: <input type="text" name="ytdwname" value="<%=user.getYtdwname() %& ...

  5. 学习PHPExcel

    关于PHPExcel使用方法,可以参考慕课网的教程,链接在此 PHPExcel的github地址:https://github.com/PHPOffice/PHPExcel 下载之后,将文件夹中的Cl ...

  6. 在Linux添加PYTHONPATH方法以及修改环境变量方法

    Linux下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户: 一:用于当前终端: 在当前终端中输入: export PATH=$PATH:<你的要加入的路径> ...

  7. vue路由动态过渡效果

    不多说,直接上代码 import Vue from 'vue' //引入vue import VueRouter from 'vue-router' //引入路由 Vue.use(VueRouter) ...

  8. vue传参

    <template> <ul> <li v-for="item in list" :key="item.id"> <b ...

  9. 6 基于Servlet 的分页

    实现上图的分页功能,每页显示3条数据,每页显示3页供用户访问,点击左右双箭头时,可以跳转至上一个或者下一个大页,如点击右双箭头显示如下: 1 连接数据库的工具类 package com.latiny. ...

  10. 并发包 concurrent(一) Atomic

    1:基础概念 悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁.传 ...