CCC2019游记
好吧其实是清华游记,$CCC2019$ 在中国只有北京和天津举办,要选去加拿大的人很少,估计是最近两国关系有点紧张的缘故吧
但实际上是某些已经被清华钦点的人去预览一下他们未来的栖息所
$13:30$ 到了清华(门口的保安都好高端啊,手臂上都有“清华门警”标志),发现清华计算机系大楼里的通道都挺神秘的,两边的研究房(其实跟学生的办公室差不多)也好高级……我只记得第一个好像叫“下一代互联网研究中心”,别的记不清了。
先去楼上听了不知道哪个清华老师的诈骗招生讲解。
老师的讲解也比较温和催眠(全场大部分听着听着就睡着了),列举了一下清华在计算机系的各个成就以及世界排行,包括 $AI$、系统等方面。名次你知道的
列举了很多排名,讲讲清华招生政策,并且鼓励在场的几十个同学早日来到清华研究学习。
其实老师完全可以不用吹那么多,或者不说,全场都会自动被诈骗去清华的(说的不错,tm考得上吗)。
吹完了,下楼去听另一个老师讲讲 $IPV6$ 相关的知识。
虽然 $IPV6$ 有 $2^{128}$ 个地址($2^{64}$ 已经是个天文数字了),而且 $IPV6$ 不分公网私网,但目前 $IPV6$ 在国内没有普及,重要原因貌似就是 $IPV4$ 和 $IPV6$ 不兼容,也就是 $IPV4$ 地址的网站不能转用 $IPV6$ 打开,目前还在抓紧研究两种地址间的翻译技术(当然还有其它原因)。
然后就早早地去 $CCC2019$ 考场了。那个机房是一个不知道该怎么形容的弧状,反正就是清华风格吧。
听说加拿大出的题很有 $CF$ 风格?不管,反正我要浪到考试。(考后我才知道根本不是加拿大的题,是清华的人自己出的选拔题,$T2$ 和 $T4$ 甚至是我们大哥出的)
然后到考前 $10$ 分钟的时候我发现我忘了 $linux$ 的终端命令怎么写了(谁闲的蛋疼天天用 $linux$),那里的 $linux$ 里没装 $guide$ 之类的可以直接编译、运行程序的编程软件,只给了类似于 $visual\space studio\space code$ 之类的文本编辑工具。
然后发现清华大哥在旁边,我就询问了一波……
(大哥:你真该挨板子啊,基础操作都忘了)
不过只能终端编译、运行程序还是不太习惯。
$16:00$ 上清华内网打开题,全是英文,都没人志愿翻译一下的,$tzsl$。
$T1$ 题意:给你一个字符串,让你输出 删掉字符串中所有出现次数小于 $k$ 的字符后的字符串。
模拟题(woc这种题就不应该开终端编译的)
果然是 $CF$ 风格?前面的题很水?
$T2$ 的英文 $non-negative$ 我忘了什么意思,猜了半天,猜想是无符号(就是非负)。
题意:给你一个二进制完全平方数,输出其开平方根后的二进制数。$90\%$ 的数据二进制数长度 $|n|\le 3000$,$100\%$ 的数据 $|n|\le 100000$。
首先能想到二进制转十进制,直接开 $int$ 数的平方,然而这样貌似只能拿 $30\%$ 的分。
然后又看了一下满分数据,$1e5$ 的数据,想了想,按照 $CF$ 风格,这题应该就是到智力题吧?
然后推了半个小时弱智结论,写了一发,并不对,白忙活了。
只好回头考虑 $90$ 分
二分答案?然而高精度二分不是很蠢吗……复杂度大概是 $O(|n|^3)$ 的样子(没仔细思考),$60\%$ 的分。
其实不难发现 高精度二分只要从高到低枚举每一位是 $1$ 还是 $0$ 即可,二进制基础知识。
对于枚举的一个二进制位,如果设其为 $1$ 后比给定的数大,就把这位设为 $0$,否则设为 $1$。
把一个二进制数修改一位后再求其平方,朴素暴力的时间复杂度是 $O(|n|^2)$ 的,套外面的枚举 $|n|$ 个二进制位,复杂度 $O(|n|^3)$。
仔细思考一下,把这个数的平方列成乘法竖式,自己乘自己,其实可以在之前的平方结果的基础上 $O(|n|)$ 修改,得到新的平方结果。总时间复杂度 $O(|n|^2)$。
所以养眼+养生磨蹭了不少时间才写完 $90$ 分。滚去看 $T3$ 了。
$T3$ 题意:给你一个环,长度 $n\le 262144$,环上依次排列 $n$ 个数,每次可以把相邻的两个相同的数合并成一个新数(第 $n$ 个数和第 $1$ 个数相邻),新数的值为合并前的任意一个数 $+1$。所有数的值 $\le 40$。让你设计合并方案,使最后环上的最大数最大(“最后”指环上没有能合并的相邻两数 或者环上只剩一个数)。
考试的时候看到数据范围以为是个贪心(比较菜),于是写了个优先队列合并区间……
然后调试的时候(大概 $18$ 点整左右),我和旁边几人的电脑突然断电了……$tzsl$
监考员(大学生)去重开电闸后,有两个人的电脑重启了两次后就打开了,然而我和另外一人的电脑就崩坏了……
算算也浪费 $5$ 到 $10$ 分钟了,监考员说会给我们加时,然后先让我们坐旁边电脑了。
监考员通过安全模式帮我把 $T3$ 的代码发了过来,然而我在这段时间里证明了这个做法是错的,因为并不能朴素地优先队列合并区间。
比如一个环上有 $1\space 1\space 1\space 1\space 2\space 2$ 六个数,正确答案应该是先合并第一、二个 $1$ 或第三、四格 $1$,答案应该是 $3$,但有可能采用合并的数相同却不正确的策略,比如先合并第二、三个数,这时最大就只能弄出 $2$ 了,显然不对。
其实可以附加一些策略来修正以上问题,但是代码好像很丧心病狂,考场写出来并不太合理,于是就跳了这题。
$T4$ 题意:
有一个神奇的式子$$(\sqrt{2}+\sqrt{3})^n+(\sqrt{2}-\sqrt{3})^n+(-\sqrt{2}+\sqrt{3})^n+(-\sqrt{2}-\sqrt{3})^n$$
这个式子中的每一项都可能不是整数,甚至不是有理数,但四项的和一定是个整数。题目并没有给出证明(就算给出证明估计也会因为不通英文而看不懂)。
不仅如此,其推广出来的式子也满足这个性质 $$\sum{(\pm\sqrt{a_1} \pm\sqrt{a_2} \pm\sqrt{a_3} ... \pm\sqrt{a_m})^n}$$
你的任务是给你 $n,m$ 和 $a_1$ 到 $a_m$,求出上式的结果膜 $10^9+7$。
$n,a_i\lt 10^9+7,\space m\le 7$
显然不能暴力,因为中间过程全是小数运算,而小数并不能取膜。
考试的时候没怎么想这题, 看到 $10\%$ 的数据中 $m=1$,于是直接做了 $10$ 分滚去看 $T5$ 了。
$T5$ 的英文有点硬核,我理解了半天才弄明白题意:
有一棵带权无根树,$n$ 个点从 $1$ 到 $n$ 编号。初始时有从 $1$ 到 $n$ 编号的 $n$ 个点集,第 $i$ 个集点集只有 $i$ 号点。
接下来有 $n-1$ 次操作,每次操作给你两个数 $a,b(a\lt b\lt n+i)$,然后生成一个编号为 $n+i$ 的新点集,其内容为编号为 $a,b$ 的两个点集的并。
保证编号为 $n\times 2-1$ 的点集恰好包含树上 $n$ 个点各一次。
对于生成出来的 $n-1$ 个点集,判断每个点集中是否有在原树上距离至少为 $k$ 的点集($k$ 全局不变),输出 $0$ 或 $1$。
$30\%$ 的数据中 $n\le 200$, $60\%$ 的数据中 $n\le 2000$, $100\%$ 的数据中 $n\le 100000$。
注:点集是集合,有互异性,即点集中不会有同一个点出现两次。
从前往后扫部分分,很快想到了 $20\%$ 数据的做法。但因为考试策略不当,准备写的时候已经只剩 $5$ 分钟了……其实本来还有 $10$ 分钟左右加时,不过我出于某些考虑并没用(包括这考试没什么用,只取前 $2$ 名去加拿大参加比赛,其余人连个证书都没有),所以没写完这题。
算了一下,这比赛应该差不多是省选难度?然而 $3$ 小时就拿了 $200$ 分……如果用加时的话可能 $5$ 分钟大概就能写完第 $5$ 题前 $20$ 分,那也就 $220$ 分,还是菜。
出了考场后发现 两位 $GD$ 神爷一个 $390$ 一个 $400$ 吊打一群人……
据说是做过 $T3$ 原题……那神仙题我等蒟蒻都不会啊……
然后剩下的人好像也都考得并不理想,除了馒 $god$ 切了 $T5$ 拿了 $300$ 分以外,再其他人最高好像就 $200$ 分了……并不知道发挥情况
$T2$ 最后 $10$ 分是出题人(大哥)防 $AK$ 的,实际上出题人自己都没想到多项式时间的做法。有一种可能可行的方法:二分答案套 $FFT$ + 压位(那个 $FFT$ 其实就是为了快速做大乘法,也就是平方),压位要把每一位开 $long\space long$ 因为每一位要存 $30$ 个左右二进制数,复杂度大概就是 $O(\frac{n\times log(n)}{30})$。注意一下不用 $NTT$,模了高精度数的其中一位还会错(你并不能在 $NTT$ 中借取模实现进位),列乘法竖式的时候先不进位,最后统一从低往高进位即可。
$T3$ 就是一个状态偏僻(想不出来)的区间 $dp$ 变形。我们知道,在区间 $dp$ 时,一般左、右端点(或左端点和区间长度)各占一维状态,但如果区间特别长(比如 $1e5$ 级别长度),这样存显然爆空间,但我们可以观察一下 $dp$ 数组存的值,如果值很小,我们可以将 $dp$ 值与 $dp$ 的一维状态交换,从而降低复杂度。这题同理,由于初始时所有数都不超过 $40$,所以即使初始时所有数都卡满 $40$,最大也只能合出来 $40+\lfloor log(n_{max})\rfloor$,不到 $60$。
把环拆成二倍链。设 $dp(i,j)$ 表示使第 $i$ 个数变为 $j$ 时,最少要向右合并多少个数(只能向右)。转移方程大概是 $dp(i,j)=dp[i+dp(i,j-1),j-1]$(我靠有了状态后转移真好想),注意特判一下 $dp$ 值不能 $\ge i+n$,这种情况下不能更新。
$T4$ 是个比较短的矩阵快速幂(但不会推式子)。简单的说个例子:看看样例,会发现式子的每一项无论求多少次幂,都可以只用 $1,\sqrt{2},\sqrt{3},\sqrt{6}$ 这四种系数表示,所以可以以系数为横轴,$n$ 为纵轴建个矩阵,简单的话就是暴力转移,进阶一点就是矩阵快速幂。
$T5$ 考后想想其实是个傻逼题……非常结论……$WZJ$ 还讲过(我还记得)……只不过没时间思考了…… 首先前 $50$ 分都可以暴力地合并两个点集;然后 $20\%$ 的数据就是暴力两两配对两个集合中的点,看有没有距离超过 $k$ 的点,快速求两点距离的话可以写 $O(1)$ 求 $LCA$ 后求两点与 $LCA$ 的深度差,也可以直接 $O(log(n))$ 倍增求;$50\%$ 的数据,可以暴力合并出新集合后,$O(n)$ 求新集合的最长链(就是从任选的一个根节点出发求两次最远点)。
满分的话,就不能每次暴力合并两个点集了。如果不合并,又要快速求出一个点集的最远点(也就是最长链),就考虑一下能否只记一个点集的最远两点(即最长链的两端)。事实上有这么个结论,就是合并两棵树,新树只有六种最长链,即原来两棵树的两条最长链的四个端点中任选两条相连,具体证明这里不赘述了。总之记住这样一个结论,这题挺裸的……但放到第五题确实很想喷,哪怕根第二题交换一下也能接受。
考完后找这个那个理由,说没看见 $T2$ 的 $90$ 分部分分之类的话有什么用呢?$HX$ 老爷不是说了部分分要从前往后看吗?
这风雨飘摇一程究竟还有多远?
CCC2019游记的更多相关文章
- 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记
先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...
- 【20160722-20160728】NOI2016滚粗记&&酱油记&&游记
先挖坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs.c ...
- NOIp2016 游记
DAY -2 不要问我为什么现在就开了一篇博客. 本来想起个NOIp2016爆零记或者NOIp2016退役记之类的,但是感觉现在不能乱立flag了.所以就叫游记算了. 前几场模拟赛崩了一场又一场,RP ...
- NOIP2016游记
只是游记而已.流水账. Day0:忘了. Day1:看完T1,本以为T2一如既往很简单,结果看了半天完全没有思路.然后看了一眼T3,期望,NOIP什么时候要考期望了,于是接着看T2.一开始我推的限制条 ...
- CTSC2016&&APIO2016滚粗记&&酱油记&&游记<del>(持续更新)</del>
挖一波坑 #include <cstdio> using namespace std; int main(){ puts("转载请注明出处:http://www.cnblogs. ...
- 游记——noip2016
2016.11.18 (day 0) 呆在家. 悠闲地呆在家.. 明后天可能出现的错误: 1)没打freopen.打了ctime: 2)对拍程序忘记怎么写了...忘记随机化种子怎么写了: 3)不知道厕 ...
- 【NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2】游记
我第一次写游记,,,, 正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪里?正文在哪 ...
- ZJOI2016二试+游记
...excited.... 一场打回原形爽哦. T1莫名爆到了10分,T2T3均没交,一个小时过后就没再拿任何分数,perfectly狗带了... 总之没有给自己充足的时间去敲暴力,ZJOI啊..拿 ...
- NOIP2015游记——一次开心又失望的旅行
啊,一年一度的NOIP终于是结束了 以前的大神都有写自己的感受 然而我居然给忘了!!!! 吓得我赶紧来写一份游记 Day.-INF--出发前一个星期 机智的我选择了停课 就是为了OIER这伟大而又光荣 ...
随机推荐
- SQL小知识_长期总结
1. 左联接右联接区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner ...
- Bootstrap 历练实例 - 折叠(Collapse)插件方法
方法 下面是一些折叠(Collapse)插件中有用的方法: 方法 描述 实例 Options:.collapse(options) 激活内容为可折叠元素.接受一个可选的 options 对象. $(' ...
- 课堂使用的Linux命令
1.ls 显示目录文件 2.ls -l = ll 显示 3.vi 创建于编辑 4.mv 改名 5. ./ 当前目录 6.chmod 修改权限 4 读 2 编辑 1 运行 7.去除UI界面 syste ...
- 第31题:LeetCode946. Validate Stack Sequences验证栈的序列
题目 给定 pushed 和 popped 两个序列,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true:否则,返回 false . 示例 1: 输入: ...
- ORTP-0.27.0移植
注意: a. 对于0.27一下版本的ORTP的交叉编译则没有一下依赖库 b. 交叉编译工具链是: arm-linux-gnueabihf-gcc-4.9.1 (4.9版本一下的编译bctoolbox出 ...
- Nginx读书笔记
... upstream proxy_svrs { server http://192.168.1.1:8001/uri/; server http://192.168.1.2:8001/uri/; ...
- mysql零散操作
添加对外用户 CREATE USER 'admin'@'%' IDENTIFIED BY '!QAZ2wsx'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'; ...
- CI框架 重定向redirect()
CI框架不能使用$this->redirect(),只能使用redirect():并且默认重定向地址带有index.php,如果需要去掉,请使用绝对地址. 使用示例: 通过发送HTTP头,命令客 ...
- PHP array_multisort()函数超详细理解
项目中用到这个函数了 ,起初对这个函数一直是懵逼状态,文档都看的朦朦胧胧的 网上无意间看到这篇文章 ,写的超级详细,收藏了 . 当然要先放原地址:https://www.cnblogs.com/WuN ...
- IP代理池之验证是否有效
IP代理池之验证是否有效 把proxy pool项目跑起来,但也不知道这些ip怎么用,爬虫的时候是否用代理去爬取,下面通过一个例子来看看. 代码如下: import requests PROXY_PO ...