zoukankan      html  css  js  c++  java
  • 【日记】XCPC退役记

    整个大学生活,除了XCPC真的几乎什么都不剩下了,可能唯一剩下的是2020年6月到9月趁着疫情学校不组织集训,摸鱼去腾讯参加了一段时间的实习吧。从2017年底加入以来,没有寒暑假,国庆节什么的也都大大缩水了,最摸鱼的那段时间是2020年疫情期间吧。这篇文章记录我大学期间的XCPC经历。

    成绩

    这一站,2020年昆明(虽然时间是2021年,但是官方名称是2020年),是我和队友M的退役战了,两个没有研究生读的大四老队员真的是最后一次正式比赛了。在退役的这一场拿到了我们的第一个,也是最后一个金牌,还是金牌的倒数第一名,还是去掉打星队伍之后才有的金牌的倒数第一名,这还能说些什么呢,真的只是堪比法老王级别的强运吧。回忆我的整个XCPC生涯,从2017年10月买了第一本书《挑战程序设计竞赛》开始,一直学到参加2021年4月ICPC昆明站为止,历时3.5年的超长XCPC生涯终于结束了,省级以上的成绩是:

    2018年 GDCPC 铜牌倒数,队友Z+队友L1。

    2018年 ICPC徐州 铁牌前列,队友P+队友L2。

    2019年 GDCPC 银牌前列,队友P+队友M

    2019年 ICPC徐州 银牌倒数,队友L2+队友M

    2020年 CCPC威海 铜牌倒数,队友M+队友Q

    2020年 ICPC南京 银牌倒数,队友M+队友Q

    2020年 ICPC昆明 金牌倒数,队友M+队友Q

    琐事

    (大一)2017年刚入学,教练来B3-238介绍ACM-ICPC(当时还叫这个名字),说欢迎零基础(OI没有省二)的同学参加,而且历年来也是零基础的同学才坚持到最后,也获得了最好的成绩。当时我只有一个弱省B卷的MO省二吧,在这个985里面什么都不是的一个小奖,在算法编程方面算是真的零基础,vector和sort都不会的那种,不知道是中了什么邪感觉这个挺好玩的样子。后来计算机学院集训队宣讲,学长Z0详细介绍了这个比赛的优点和缺点,看到以前的学长们都是深造或者去(华为腾讯网易这种)大厂工作,可能觉得这比赛有点好处吧,就决定参加了。不过错过了学校的TIC的招新,想进去旁听之类的,部长学长Y还不让我进来着(不知道他会不会玩知乎的啊,别帮我@他出来哦,谢谢)。然后就买了第一本书《挑战程序设计竞赛》,算是正式入门XCPC了吧,在校内选拔里面得到了一个三等奖(至今还贴在我宿舍的墙上来着),就进入集训队里面做了个垫底大菜鸡。

    然后到2018年的寒假,父母想让我去把驾照考了来着,想翘集训早点回去,被教练diao了一通,后来在春节前后找时间把科二过了。后来才知道这是华工计院集训队翘训练的黑话——“学车”。当时培训的内容都超级难的,而且配套的vj上面的练习都超级难,对零基础的真是超级劝退,而且自己也是有够废物的,总是在上班时间摸鱼。一个寒假过去了什么都没学会,就原地踏步。寒假组队赛之后,其他同学的成绩也是有上有下,然后按传统(CF1490/1490)直接从上到下每3个人组一队,这样就认识了两个队友Z和L1,他们和我的水平很相近,都很菜。在2018年春学期,靠着一点小聪明弄了个校赛银牌,其实三个人都对这个比赛的态度非常消极,水平就继续原地踏步,到省赛被全广东高校打出翔(印象最深刻的是坐在我们后面的广东外语外贸大学的“纸上牧羊”队,因为队名3年了一直都没变),然后就得了铜牌倒数,因为是真的啥都不会,乱做一通,教练称我们队“刷新了华南理工大学在省赛的历史最低记录”

    (大二)然后到2018的暑假,又到了学车的时间了!教练说下学期按成绩分配区域赛名额,不保证每个队伍都有,然后我觉得我们队好像很不行的样子哦,还不如去把科三考了,又被diao了一通,后来也是在10天的“暑假”里面把科三科四过了(这直接导致后面高年级没有学车的机会了)。暑假组队赛之后,按排名(CF1680/1680)重新分配了队友P和队友L2,队友P是一个代码实现能力非常优秀的人,而且也非常认真,后面也越来越依赖他,队友L2是个口胡专家。比起之前的队伍,配合得要好很多了。2018年的秋学期,沾学姐L的光教练给每个队伍都分配了至少1个区域赛名额,我们分配的是2018年徐州,和前面提到的学长Y一起去的。后来一直组队训练的效果也还行,vp很多区域赛都是铜牌,可能当时的追求就只是不打铁混个奖吧。等到我们去到徐州(CF1657/1806),被随机最小生成树和出题人贴心的矩阵树定理搞到4小时才第一发提交,WA了。最后几分钟已经自闭到爆零放弃了队友L2把矩阵树定理删了就,居然就AC了……最后发奖牌的时候,看见是铜牌倒数,后来主办方用至少通过一题的队伍重新计算一次奖牌数,就变成铁牌前列了。中国矿大确实是真的很负责的主办方,所有的安排都一丝不苟的,可惜真的题目的区分度有点内个。因为华工计院集训队的传统是打铁要自费报名费1500元,所以打铁了还是挺不开心的吧。(当时同届的组合是Z+A+C1、C0+D+M、我+P+L2)

    很快到了2019年的春学期,队伍的成员没有变。校赛很轻松的拿金奖了。那时候开始对队友P的依赖达到了顶峰,自己也越来越不知道干什么好了,只学了一点数学,然后负责越来越多的乱搞(CF1721/1802)。省赛也靠抱队友P的大腿拿银奖了,最后才想出来是换根DP,错过了金奖。值得一提的是当时的K题也是个麻将题,是我乱搞的。到暑假的时候,同届的组合是(A,C0+D+Z,我+P+L2)。和你猜的一样,另一个队伍(华南理工大学_赌徒)和我们都被大佬A的单人队伍打爆了!落单的大佬A似乎想和大佬学弟W和我的队友P组成一个新队伍(华南理工大学_星辰闪耀),我们选择了去年徐州的老熟人L2补上了这个位置。其实预感到要离开大腿队友P之后,意味着要有人去做数据结构,那时候是我真正开始认真学算法竞赛的开端吧。虽然经过2个月的学习,还是在组队赛中没有打过大佬学弟W,不过我的科技树也开始变得正常了一点,不再是只会乱搞的菜鸡了,至少是个会写线段树的菜鸡(没错,我不会写线段树)。

    (大三)2019年秋学期,我们又选择了徐州赛区,这次我们和赌徒一起去徐州。值得一提的是,我们拖了一个旅行箱的模板和书去,其中包括了东南大学出版社的《数学一本通》,赌徒们名副其实,没有带完整的模板,自信不会用到那些科技。然后那一场赛区就出来一个大数质因数分解,要抄PollardRho才能过……emmm,然后我就抄了书上的那个东西,套上一个打CF常见的计数方法,就过了那个题,获得了第一个奖牌,ICPC银牌。那一场很多队伍可能因为没有带全模板的原因被这个简单数论题卡了,所以签完到然后抄一个PollardRho就可以有银牌。当然2019年徐州还有一个带修主席树的题,而且我也带去了不带修主席树的模板,不过这在当时看不出任何异常,确实是我补题极不认真吧。在徐州结束后的一个月,我的CF终于突破了一年的历史记录,达到了1916/1916,可能是认真学科技的结果吧,至少会做了紫色的套路题。

    到了2020年的寒假,新冠疫情开始蔓延了,预定的寒假集训也凉了,开始担心起这比赛还有没有了。这时候3月份辅导员发了个腾讯招聘的链接,稀里糊涂的就自己DIY了个,看见移动客户端写的要求比较低,就投到移动客户端去了。4月中旬我达到了2114/2114,准备放弃去实习的时候,被现在的部门捞起来了。后来和教练交流了我的担忧,教练称“这情况也不知道怎么办才好了,都可以吧”,于是华工计院集训队就有了去暑期实习的机会了……

    6月,去腾讯深圳实习。经历了很多事情,也参加过腾讯的TPC,抄了个线段树拿到了奖品。也学到了很多学校里学不到的精神,最让我印象深刻的是导师W说的:“说实话,我觉得你和他(另一个实习生J)都缺少一点毅力,以前的实习生都是‘今天我就算通宵,也把这个东西弄好’,你们的话总是留下一些坑等别人去填。”8月底,看见同届的同学们都逐渐辞职回校了,我觉得我可能还是更喜欢做个老赛棍,不知道是应该继续实习下去还是回校继续参加XCPC,和导师W交流了我的困惑,他说”你现在才20多岁,想干什么就去干什么,这是你唯一的青春,不要为了那一点点的差异,就放弃了你的梦想,做了让你后悔一生的选择。“

    (大四)实习期间下班也打CF,9月回校的时候,恢复到了上学期的水平2128/2128。组队赛也有参加,这次发挥有点诡异,不过队友M还是不嫌弃我,和一个新的大佬学弟Q组成了最后的队伍(华南理工大学_单推圣人惠)。新的队伍里面的分工是,队友M负责计算几何和字符串和乱搞,我负责数学、数据结构和乱搞,队友Q负责数据结构、图论和乱搞。其中队友M和队友Q的口胡能力极强,乱七八糟的贪心DP什么的都会,我主要是做一个无情的写码工具人,可能因为我是代码功底最好的吧。

    CCPC威海,一开始想到了那个背包,但是看复杂度不太敢往那个方向继续想,最后队友Q说清楚思路我才发现这是真做法。最后凭借不算差的罚时拿到铜牌。ICPC南京,没学过树上背包,很遗憾,最后30分钟才想出来复杂度是对的,但是也还是不会写。

    然后还是一直训练,一星期训练3次,就算是春节也没有落下任何一场CF,达到了2183/2245。后来开始从选赛区了,队友们都想去线下参加,我不太赞成线下因为我觉得到时候可能搞核酸隔离什么的就麻烦死了,事实证明线下推迟得太厉害直接等到现在疫苗都普及了。一开始考虑去不去澳门,虽然有港澳通行证但是怕境外真的要核酸隔离什么的,而且时间太赶了(没想到推迟到比昆明还后),就选了昆明。出了报名表之后看见很多强队,就有点慌了,仔细一个一个查强队们的历史战绩,肉眼可见比我们强一截以上的大概有接近50队,当时都已经无所谓了,战胜20个强队拿金牌什么的,我已经不指望了。新学期,我们队伍每星期4次,都会开一场5小时的XCPC来练习配合,逐渐的大家很默契,在很多个赛区的录像里(在不小心看了赛后榜和听了赛后讨论关键字的情况下)都拿了银牌金牌。我觉得希望是逐渐提升的,但是具体提升是多少实在不清楚。

    热身赛结束后,忐忑得睡不着的我,联想起wls等使用CF分对区域赛成绩进行的估计,CF2000分对应金牌实力,仔细算了一下我们的最高分是2047分,也真的有金牌实力。回想起南京卡的那个树上背包,后来在div1的C见过,是个2400分难度的题,那么我感觉可以估计金牌题就是2400分难度,所以平均分是2047分的科技互不相同的三个人,在时间延长3小时并且配合默契的情况下搭配着打出2400分的题,是不是就是这个理论的来源呢?使用这个模型计算出昆明赛区的获得金牌的概率是42%,相比于南京赛区获得金牌的概率是16%,已经有了很大提升。但是我还是紧张到睡不着,直接通宵了,第二天和队友Q说:“我现在也不知道自己是不是清醒,我走路都摇摇晃晃的差点跌到3次。但是我清楚地记得LCT的每一行怎么写。”

    正赛,I题是计算几何担当M大佬完全一个人单推的,另外两个人题目都没看,然后就1A了,学了几年的计算几何在关键时刻终于依靠快速实现和无dirt争取到罚时优势,M大佬应该很开心!J题M大佬和Q大佬一起从多个角度理解构造,然后一起检查代码是否实现有问题(没错我们真的有code review),还assert了一发确认代码实现没有错(意思就是算法错了),虽然后面数组开小了发生段错误(牛客网OJ居然还会提示RE的具体种类?!)罚了20分钟,那时候可能心急了,还好全场只有那一次的小dirt。K题是个麻将题,我们的实现就是枚举舍弃的牌和新加入的牌,然后dfs去check是否和牌,中间加入了一堆乱七八糟的剪枝并且这些剪枝一度把正确答案给剪掉了!我感觉这题确实是不好搞的,要有比较丰富的代码实现功底(卡常经验)和比较丰富的dfs经验。我用了四种剪枝,想了想没写第五种,交上去1A了。

    封榜后,比赛时间的04:07,M题还是没过,不过Q大佬推了很久的区间前缀和作差,然后指出是离散化后两棵对应区间的权值线段树的差值,然后在这个差值上面找不超过x的数的前缀和,查询这个值的时候自带一个倍增。这时让Q大佬上机去写,我和M大佬帮忙看看算法的复杂度和细节。然后Q大佬翻了翻板子,发现他的主席树没有离散化的!这下难办了我已经2年没有写过主席树了,现场想怎么改模板也许可以,毕竟还剩下50分钟。但是我突然想了下,比赛前一天晚上我通宵了,一晚上都没睡着,那时候看了看2019年徐州带的板子,里面有当时的我亲手设计的全功能主席树!打开两年前打印的模板一看,发现两年前的自己已经帮现在的自己离散化好了,建立各种不同的查询版本的主席树的整个流程也都有详细的中文注释和样例代码!14分钟敲完整个主席树然后套上Q大佬推出的询问公式,再对一对样例,总共花了18分钟就过了这个卡了4个小时的M题!这就是传说中的“现在的你一定会感谢两年前努力的自己”吗?!!

    看见最后是38名,当时觉得挺失落的吧,因为我感觉打星队伍不会有这么多在前面,M大佬执意要拿打星队伍名单数一数,发现前面打星的人刚好是3个,真的就正式队伍的第35名,最后一个金牌呗?

    最后感觉wls使用CF分对区域赛成绩进行的估计理论可能是正确的,J题和M题都是要大家配合着通过的,在CF时独立完成的3个人,得到的CF分也是独立的,在科技也互有差异的情况下,3人的互相配合可以做到1+1+1>3的效果。预测结果40%也表明了我们获得金牌与不获得金牌几乎是一半一半的概率,最后卡35名最后一个金牌也是验证了这一点,假如稍有失误,或者是再一发dirt,或者是K题多剪了一次枝提交慢了,或者是M题想离散化或者改模板的查询方式,都会丧失这仅仅6分钟的罚时优势。

    总结

    昆明:

    队友1 队友2 队友3 默契
    2190 1806 1914 0.4
    难度 P1 P2 P3 P 铜牌 银牌 金牌
    1900 84.15% 36.79% 52.01% 98.57% 98.57%
    2000 74.91% 24.66% 37.87% 95.01%
    2100 62.67% 15.55% 25.53% 86.85% 86.85%
    2200 48.56% 9.38% 16.16% 73.16%
    2300 34.68% 5.50% 9.78% 55.93%
    2400 22.99% 3.17% 5.75% 38.96% 38.96%

    南京:

    队友1 队友2 队友3 默契
    2031 1756 1852 0.3
    难度 P1 P2 P3 P 铜牌 银牌 金牌
    1900 68.01% 30.39% 43.14% 93.19% 93.19%
    2000 54.45% 19.71% 29.90% 82.96%
    2100 40.20% 12.13% 19.35% 67.24% 67.24%
    2200 27.43% 7.20% 11.89% 49.26%
    2300 17.53% 4.18% 7.05% 33.05%
    2400 10.68% 2.40% 4.09% 20.75% 20.75%

    威海:

    队友1 队友2 队友3 默契
    2105 1753 1588 0.2
    难度 P1 P2 P3 P 铜牌 银牌 金牌
    1900 76.50% 30.02% 14.23% 90.47% 90.47%
    2000 64.67% 19.44% 8.54% 80.11%
    2100 50.72% 11.95% 4.99% 65.47% 65.47%
    2200 36.66% 7.09% 2.87% 48.89%
    2300 24.55% 4.11% 1.63% 33.52%
    2400 15.47% 2.36% 0.92% 21.45% 21.45%

    从结果上看,选择昆明是幸运的。不过我学了3年的数学,最后真的和自己预测的一样,是真的没有机会用上了,因为需要用数学的题可能已经是稳金之后了。2019年的徐州站和2020年CCPC的网络赛应该是我参加的正式赛里面唯一用到数学的吧。作为一个两年没有见过主席树的人,新的模板里面都直接跳过了,没想到这一场退役站出了,真的是实在不知道说什么了。

    后记

    毕业后要去腾讯做Android客户端开发了,经过大四这一年我逐渐觉得Android可能和这个金牌有什么内在联系,其中最重要的是导师W的那两句话。拿到金牌之后我回忆起我的大学生活,就像上面写的那样,事实上只学了1.8年,前面的1.8年真的是浑浑噩噩的。现在在Android中遇到的困难,会不会是那前面的1.8年呢?假如我咬咬牙努力走完了,我是不是就节省了一年?假如我在2024年做到高级工程师,那我希望我能够加入G家吧。说实话对未来没有什么特别的规划,可能学英语考雅思然后想办法加入G家再调动到C国是目前的想法吧,或者真就去搞量子……。

  • 相关阅读:
    JSP基础学习
    opnet仿真过程中SEED的概念问题 分类: opnet 2014-11-02 15:25 69人阅读 评论(0) 收藏
    strtok函数 分类: c++ 2014-11-02 15:24 214人阅读 评论(0) 收藏
    无线网络中常用的路由算法 分类: 协议 2014-10-08 19:40 86人阅读 评论(0) 收藏
    cin问题 分类: c++ 2014-08-02 21:13 38人阅读 评论(0) 收藏
    opnet点对点通信模型 分类: opnet 2014-05-26 22:15 246人阅读 评论(3) 收藏
    opnet的sink模块学习 分类: opnet 2014-05-18 10:28 161人阅读 评论(0) 收藏
    opnet的simple_source模块学习 分类: opnet 2014-05-18 09:50 170人阅读 评论(0) 收藏
    OPNET中FIN,FOUT以及FRET的作用 分类: opnet 2014-05-12 16:07 144人阅读 评论(0) 收藏
    opnet安装及安装中出现问题的解决办法 分类: opnet 2014-04-06 21:50 397人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/purinliang/p/14617737.html
Copyright © 2011-2022 走看看