记CACC 2024 区域赛

今日巡视文件夹,发现有这么一篇博客,当时没有发博客,现在补发。

记CACC 2024 区域赛

题目

A. 报数淘汰

给定两个整数\(n,m\),编号从\(1\)\(n\)\(n\)个人围成一圈,依次从\(1\)开始报数,报到\(m\)的人淘汰,求最后一个被淘汰的人的编号。

数据范围比较小,可以直接暴力。

B. 矿物探测

给定正整数\(n\leq10^6,m\leq n-2\)和长为\(n\)的整数序列\(energy = (energy_0,...,energy_{n-1})\),求\(\min_{i=1}^{m - n - 1}(\max\{\max(a),\max(b)\}-\min\{\min(a),\min(b)\})\),其中\(a=energy[0,i),\ b=energy[i+m,n)\)

C. 分奇偶的区间维护

给定正整数\(n,q\in[1,5\times10^5]\)。一个长为\(n\)的序列\(arr=(arr_0,...,arr_{n-1})\)初始均为\(0\)。一共\(q\)次查询\(op\in\{0,1\}\)

\(op=0\):再给定整数\(begin\in[0,n),\ end\in[begin,n],odd\in\{0,1\},diff\in \mathbb{Z}\),若\(odd=0\)则将\(arr[begin,end)\)中的偶数均加上\(diff\),否则将其中的所有奇数均加上\(diff\)

\(op=1\):再给定整数\(begin\in[0,n),\ end\in[begin,n]\),求出\(\sum\nolimits_{i=begin}^{end-1}arr_i\)

D. 扑克牌

没时间看题。

E. 虚拟机调度

一个机器(虚拟机和物理机都是)包括两个属性:VCPU数量\(vcpu\),内存容量\(mem\)。它们都是正整数,而且比较小。

struct Machine {
	int vcpu, mem;
};

每个物理机在初始时有\(VCPU\)个虚拟核心和\(MEM\text{GB}\)内存。

评测机在main.cpp内置交互系统代码,main.cpp#include "scheduler.cpp"。选手编写scheduler.cpp,需要实现有以下功能的调度系统类Scheduler`。

  1. 默认构造函数。

  2. 成员函数void init(int n, int c, int m);:交互系统会在最初状态调用该函数,告知Scheduler初始有\(n\)个空闲的物理机,编号依次从\(0\)\((n-1)\),所有的物理机(包括后续申请扩容时获得的)最初都有c个虚拟核心和mGB内存。

  3. 成员函数std::pair<int, int> create(int id, int c, int m);:交互系统调用该函数,表示申请创建一个编号为id,虚拟核心数为c,占内存mGB的虚拟机。一个虚拟机必须创建在一个有足够多(比虚拟机的多)空闲的(即不被虚拟机占用的)虚拟核心和内存的物理机上,被创建后会占用相应数量的虚拟核心和内存。在合适的时候,调度系统Scheduler可以选择扩容,即增加一定数量的物理机,增加的物理机从当前物理机数开始继续向后编号,交互系统会先扩容再创建虚拟机,因此调度系统可以将新虚拟机创建在新增加的物理机上。每次扩容的物理机数量必须限制在\(\mathbb{N}\cap[1,100]\),且总物理机数量必须限制在\(50000\)以内。函数返回两个值,依次是存放该虚拟机的物理机编号和所申请扩容的物理机数量。如果不扩容,则第二个值返回\(0\)。保证该函数最多被调用\(50000\)次。

  4. 成员函数void remove(int id);:交互系统在删除编号为id的虚拟机后,通过该函数告知调度系统。

对于每个测试点:交互系统实时检查调度系统的输出是否合法,如果有不合法的调度,该测试点立即记0分;如果所有调度合法,若扩容到总共\(x\)个物理机,而基准线程序扩容到总共\(y\)个评测机,则该测试点得\(\frac{x}{y}\times0.6\times200\)分。最终得分为各测试点平均分。

过程

赛前

预备了一些模板,例如有理数、树状数组、线段树和矩阵(不完善)。打印了出来。彩打太贵舍不得,只好用黑白打,而且双面打印,一面打2列,极致省钱。

订了手机7个和手环2个闹钟,生怕起不来。12月1日0:40即上床,然而快睡着时被主播哥吵醒,1:04才睡着。睡眠很浅,早上6:30被第一个闹钟就叫醒了。舍不得起,遂清醒地再躺了8分钟。

天还没亮就起床,看到了日出的光辉。然而时间似乎有点来不及。

急急忙忙买了碗方便面,加两个鸡蛋,加小菜。正要吃的时候,ZZM忽然告诉我有疑似流星的东西,附照片。大惊,出门观之,果然,拍照录像记之。

吃面条时,ZZM言想买Luckin,甚以为然。二人匆忙骑车至时代广场,取餐而奔地铁。北京大而多人,故周日晨而地铁无座。路习大计基,没看几页。辗转三番,换乘两次,乃至北工大西门站。出站,四顾茫然;俯视导航,乃知步行20分钟,而余时不足半小时。我劝骑车而行,ZZM顾交法,不敢逆行,遂弃车步行。大步流星,而鱼告我CACC牌面甚小,仅惨淡一标语。沿途察之,果然。

匆忙至考场,拿着一堆东西上了座位。

赛时

考场采用Win 10系统,大抵没有Linux环境。有VS Code,有C++插件,有依赖,功能正常。还有一些奇奇怪怪的插件。

比赛竟然通过访问赛氪网站来公布题目和提交。似乎可以访问非比赛题库,然而我没有仔细考察。

A题非常简单,然而想半天没写清楚,大抵没带脑子。调试发现插件C++ Compile RunC++ Runner取代了C++插件自己的调试,愤怒,禁用之。

B题实际上也很简单,然而被比赛前几天看的另一个题目干扰了。都是滑动窗口思想,那个题用std::set维护区间最值,所以这里我想也用std::map。然而超时。撰写快读快写,仍超时。计算觉得应该不会超,写“极端数据”,想用相同的树卡掉std::map,对拍,确实没超,提交,仍超时。想到\(a\)可以不用std::map,而是可以随着i增加来更新最值,但仅降低常数,仍超时。想到pb_ds中的__gnu_pb_ds::tree,替换,仍然超时。又想到可能更差的数据是降序而非重复元素,一测,果然超时。

寻思无果,遂暂时放弃,转而读C题。C题看起来很像线段树,区间修改,区间查询,然而分奇偶,不知如何维护。再看D题,甚为复杂,放弃。略读E题,稀奇古怪。又看B题,仔细思考如何预处理,茅厕顿开,直接预处理\(b\)对于各个\(i\)的最值不就行了?奋指疾书,提交,果然AC。调试时发现STL疑似无法在调试器中正常访问(其实只是std::array特性),配置了一下,发现C::B路径下一个MinGW/一个mingw64/,VSC路径下又一个mingw64,我估计Dev-C++下面还有一个;中途还发现“快捷访问”里面固定了一个文件夹叫“vsc乱码”,顿觉十分好笑。

再看C题。很像线段树。没记错的话,30%的数据\(n\leq100\)还是\(500\),70%的\(n\leq10000\),100%\(n\leq5\times10^4\)。以为30%暴力,70%普通线段树或者树状数组,100%某种特殊构造的线段树。对着模板抄写一顿,冥思苦想如何维护。想到维护两个线段树分别记录奇数和偶数,区间加偶数即在对应树内lazy,区间加奇数就在加上\(diff\)后把被覆盖的区间整个移动到另一棵树上(记录每个子树中的奇数或偶数数量。这样也便于通过lazy计算区间和)。查询时同时查两棵树,加一起。试了几次,对拍几轮,调试半天,仍然WA。线段树是非线性数据结构,不便调试,不知道怎么错的,浪费我几个小时,他妈的。

在我写线段树的时候发了中饭。出人意料的是€€£竟然不是用那种屎一样的面包肉饼,而是麦当劳!每个人一瓶水,一个芝士牛肉汉堡(可惜有酸黄瓜,还被我咬了一口)和一个香芋派。惊奇发现香芋派竟然这么好吃。很多人没来,汉堡香芋派都有多,但我没有多要。

线段树调了几个小时没搞好。15:35决定写个暴力先交着,想着看能不能常数低一点骗一点分,就用了快读快写。样例过了,提交上去,竟然WA!!怀疑人生,琢磨半天,不能理解,心态崩溃。观通过/提交数据,E题(工程题)竟有几百人都过了,惊,决定先写E题,换换脑子。

E题题目结构非常混乱模糊,读了五六遍才读懂题目。写了一点,想优化,便搞了些std::map甚么的。一运行,竟然有exception!我想最多是RE啊,怎么可能异常??一看,我草,竟然是在main.cpp抛出的。一调试,发现读取数据不对,遂迷茫,心态崩溃。徐而察之,发现应该是出题人用的项目会把可执行文件生成在build/目录下,所以我这里文件重定向异常了。修改一下,果然好了,转而变成死循环。调试发现是std::map::find没找到,而循环条件设的true,原来是要用std::multimap。一改,变成WA。细细思索,发现不适合通过这种办法获得最优选择。改了半天,全都0分(除了题中样例满分),尾声将近,身心俱疲,直接开摆,放弃优化。调试半天,总算有分,毫不犹豫,立即提交。不记得是20.08还是20.04分了。

最后17分钟,仔细琢磨C题,仍不知为何出错。时间紧迫,线段树恐怕不得不放弃了,遂琢磨为甚么暴力会WA。过一过之前对拍生成的样例,发现全都生成0,非常懵逼。想来快读快写已经过B题检验,怎会有错?然最后七八分钟,无可奈何,采用iostream,竟好。最后2分钟,提交,我草,70分!!!

赛后

最后时刻,悲喜交加,又惊又喜,心态再崩。收拾物品,上个厕所,离开考场,四顾茫然。盖ZZM有约,而我一身孑然。远有湖南挚友,早已交卷;近无心仪女生,无人同餐。开美团而望四周,盖高校皆地处苍凉,远美食而近学术。思索半晌,不知所归。浑噩出校,误入停车场,妈妈的,还用围墙拦起来,绕半天才上人行道。路边花坛有共享单车,一排摆放,东倒西歪。扶起一辆,车把正向,欣喜扫开,骑行几米,左脚悬空,低头查看,竟无踏板!!愤愤还车,换一破车,赶赴地铁,欲食天街。

首经贸站换成房山线。开往阎村东的车很多人在等,不爽,注意到上一站是起点站,决定反坐一站,好坐座位。等待半天才来反向的车,现在想来,大抵因为房山线与另一条线合并。再回首经贸站,竟似乎经过了两站,使我疑心,因为坐了一站的时候发现没上几个人,觉得很奇怪,怎么这下首经贸站没什么人了,结果下一站才是首经贸,上来一堆人。然而当时身心俱疲,魂不守舍,无心查清。

路上看到群里有人说有的考点没断外网,甚至能用人工智能,逆天。ZZM说我们这里也能访问OJ上非比赛题目的所有提交记录,离大谱。

到达天街,巡视一圈,都贵,最后吃了牛Yo范的辣椒炒肉盖饭套餐,美团用券¥20.80。没说额外加辣,结果不很辣,略失望,但鹿茸菌鸡汤好喝。店员很热情,送我一瓶甚么“大窑橙诺”。吃完后店员还问我有没有甚么意见建议,令我意外,我说不够辣,她说能加辣,好罢。感动,遂在美团好评。

感受

免费的比赛能有这么好的伙食也确实了不起。

然而我确实是个废物!这种成绩,使人汗颜!如此成绩,如何保研?

第一次跑这么远参加比赛,来去一共四小时,就烤出个这样的分数。我宣布我已经不是城里人了。

posted @ 2025-08-31 01:17  我就是蓬蒿人  阅读(78)  评论(0)    收藏  举报