NOI 2018 Day 1
打出GGGG
看完题感觉AA和都挺可做的,稍微想了想感觉都能编出来做法,就先去写AA了。
是个普及组并查集,几乎全场都过了,但是是多组数据。写完之后直接命令行测了测每个样例,都没什么问题就扔了。
看了看BB,感觉应该先打个表。打完表发现所有满足条件的序列的最长下降子序列都不超过,然后感觉就是这个结论了。然后开始逐位确定,中间#、ideaidea挂了几次,发现实际上在每个位置就是要求 fn,mfn,m 表示长度为 nn 的排列第一个数是的方案数。
推了一会感觉有点推不出来,于是又打了个表,发现实际上就是一个类似杨辉三角的东西,不过一条边上不是 11 而是卡特兰数。
尝试把卡特兰数转成括号序列,想了半天没想清楚。然后随便把第行第i−j+1i−j+1列的数乘上了 ijij 就莫名其妙变成真的杨辉三角了。
然后得到了一个式子 fi,j=(i+j−2j−1)×(i−j+1)ifi,j=(i+j−2j−1)×(i−j+1)i ,感觉这个式子要用上还要推,只剩2h2h多了,写了个 8080,赶紧去写CC。
题一开始想了个SAM的两个loglog做法,肯定过不去。不过发现可以SA做到一个loglog,在求 Sl…SrSl…Sr 和 Tx…TmTx…Tm 的最大 lcplcp 时误以为只要在 heightheight 上找相邻的就可以了。写完调得差不多还剩 1h1h,发现总是跑不出样例,然后发现ideaidea又挂了,于是开始修锅。
直接在 heightheight 上找是不对的,但是整个区间可以分成通过 heightheight 作用的 lcplcp 和端点作用的 lcplcp ,可以在线段树上用非常复杂的二分求得这个端点,然后两边分别处理。但是这个做法根本不能写,写到只剩 2020 分钟的时候打算弃疗改两个 loglog 。
因为要改一个 loglog,所以之前枚举右端点的那份代码删了,然后不知道枚举左端点的代码哪里写假了,最后 2020 分钟根本发现不了。调不出来,打出 GGGG 。
同步赛打完估分 100+80+0100+80+0,感觉凉了。
下午测评的时候才发现真的凉了:AA 题忘记清空最短路的 visvis 数组,得到了 55 分的好成绩;BB 题写完了几乎所有的部分,除了忘记拆开式子将 fi,jfi,j 化为 (n+mm)−(n+mn+1)(n+mm)−(n+mn+1) ;CC 题随便交了个完全错误的垃圾玩意,过了 Q=1Q=1 的两个点,最后只得到了 9393 分。
感觉问题主要就出在了 CC 题挂的一次 ideaidea : 因为这个问题导致整个时间的预判出现了问题,也没有对 AA 进行任何的检查。而 CC 题的实际做法好写简单,没有想到纯粹是因为想到一个做法就开始去写了,而没有去思考一些更简单的做法,可以说是导致考挂的直接原因。
至于别的原因,还是代码能力不行,写东西写不出来,感觉是写的时候注意力不够集中的锅。
看起来 day2day2 考 300300 分也翻不进队线了。
还好放弃了省队名额,给安徽丢脸了。
离 IOI 还有一个半月,这样下去是要打铜的。
NOI 2018 Day 2
好像看起来真的打铜了(摔
AA 题读出了四个版本的题意,只有一个版本可做,结果 1.5h1.5h 才写完。
感觉 CC 题一看就不能做,于是去看 BB。
BB 一开始一直觉得分治靠谱,过了 1h1h 突然发现复杂度不对,然后又花了半个小时想到了一个 分类讨论+虚树+直径+平衡树合并 的一个 loglog 做法,感觉并不太能写。改成了暴力线段树合并然后开始码。
写完过了样例 11 ,调了调过了样例 22,调了半个小时多组数据清空过了样例 33 ,然后最后也没过样例 44。
怎么 AA 题我用 multisetmultiset 达到了和 setset 一样的效果…手残把 erase(it)erase(it) 打成了 erase(*it)erase(*it) ,GGGG 。
BB 题数组开小了导致 m>50000m>50000 的点全挂了。在 lcalca 相同的部分和不同的部分各写了一个 bugbug ,估计同步赛也没啥分了。
CC 题怎么送了 5050 啊,不过也没写,可能是因为是同步赛于是就心态不一样了。。
好像让名额让出了一个 DD 类集训队,赚了赚了。