2023-2024 ICPC German Collegiate Programming Contest (GCPC 2023)
1|0Preface
好久没队里一起训练了就周末约了队友去机房VP了一场,同时终于学会了撬机房门这一核心技术
这场总体打的还行,但主要是B全队集体想复杂导致最后没调出来,J徐神写的维护啥的都没问题就是算答案的时候没想清楚,本来可以出11题的
2|0A. Adolescent Architecture 2
徐神总是能在开局就找到每场最难的题目然后开始思考,这题防AK只能说做不了一点
3|0B. Balloon Darts
VP的时候想复杂了导致没写出来这个理论上的Easy-Mid题,实在是可惜
我们队比赛时的做法是先找一个凸包,如果凸包上的点数大于则一定无解
否则可以发现对于凸包上的点之间构成的直线中,如果有某条直线经过了四个及以上的点,则这条直线必选
这样一波操作下来可以使剩下要暴力判断的点变成,就可以直接上暴搜了
但不知道是思路有问题还是实现不行,最后调了半天也没过,看了题解才发现原来是个Easy题
考虑对于某个个点,要用条直线经过它们的局面,当时该局面显然可达
否则考虑找一条直线来缩小问题规模,乍一想我们需要暴力枚举点对,复杂度就很爆炸
其实仔细思考我们发现由于抽屉原理,我们只需要在前个点中枚举点对即可
然后每次确定一条直线后就扫一遍然后删去所有在直线上的点并递归子问题即可,总复杂度为
4|0C. Cosmic Commute
这丁真题过的人怎么不多呢
考虑先BFS求出起点到所有点的最短路,以及所有点到终点的最短路,此时可以先行计算出不经过虫洞的最小代价
接下来考虑枚举在哪个虫洞进行时穿,计算贡献就非常简单了
5|0D. DnD Dice
这题徐神写的,我题目都没看,好像就是个大力背包题,只不过需要用long double
存保证精度
6|0E. Eszett
签到题,但因为没看清题目中说最多只用三个连续的S
导致写的偏麻烦了
7|0F. Freestyle Masonry
在WA了好几发后最后15min灵光一闪上去魔改了个新做法就过了,刺激刺激
这题首先徐神有一个思路就是从下往上一层一层考虑,每次贪心地尽量放横着的块,遇到填不了的空位再放竖着的块,这样正确性显然但实现比较麻烦
然后我就想到那为什么不能从左往右贪心地放,每一列尽量先放竖着的块,把空位留到尽量上方的位置,然后放横着的块
这样维护的时候只需要记录下每一列有哪些位置被占用了即可,但如果直接这么写的话会T飞因为可能会出现占用的位置很多的情况
冷静思考一下我们会发现这些位置间的高度差一定都是(手玩会发现如果有多个占用位置的话仅有这种情况),因此可以直接用两个变量维护最小值和最大值,转移的时候讨论下即可
8|0G. German Conference for Public Counting
签到题,直接统计每种数码最多出现的次数即可,最优的情况肯定是若干个数码的连接,注意的情况的处理
9|0H. Highway Combinatorics
好劲的题啊,当时后期和徐神一起想了半天的这个题愣是不会,后面发现又是大力随机出奇迹
首先发现这题的本质其实就是找一些斐波那契数,使得它们的和小于等于且它们的积模等于
题解的做法是一个类似于meet in middle
的做法,先在左右半边各找个集合,使得每个集合内斐波那契数的下标和小于等于,然后最后合并两部分即可
考虑当所有数都大致均匀分布的情况下,一共可以得到种数,有很大的概率可以覆盖内的每一个数
但这种做法需要特判的情形,解决方法就是搞一组无解的情况即可
10|0I. Investigating Frog Behaviour on Lily Pad Patterns
很裸的线段树上二分题,只不过题目中输入形式很有迷惑性,需要仔细读题并观察样例才能get到正确的题意
11|0J. Japanese Lottery
首先我们考虑当已知当前局面代表的排列后怎么计算最后的答案,一个很naive的想法就是求逆序对数,但徐神写了之后发现连样例都过不去
赛后看了题解才发现要从置换环的角度考虑,发现添加/删除一根横杆总是可以使这个排列的置换环个数+1/-1
因此我们最后要得到有个置换环的排列的话就需要减去当前排列的置换环个数
至于怎么维护排列可以直接用线段树以高度为下标,每个点的修改相当于一个映射操作,同时pushup
的时候注意下顺序即可
总复杂度,以下代码是我赛后在徐神比赛时候写的代码上微调得到,因此会有码风的不统一
12|0K. Kaldorian Knights
很经典的容斥题,想清楚的话就不难的说
考虑设的前缀和为,不妨定义表示对于个人,需要满足前个限制关系的方案数,计算过程可以用以下容斥得到:
这个式子的含义其实手玩一下很好理解,然后乍一看复杂度是很爆炸的,其实不然
除了初始的状态外,所有的状态都满足第一维是原序列的前缀和,同时其对应的下标和第二维的差值总是
因此实际上的状态数是的,而计算过程需要枚举,因此总复杂度为
13|0L. Loop Invariant
经典题,根据常见结论我们知道断开的位置一定是某个前缀为合法的括号序列的位置,然后判断是否和原来相同可以直接大力Hash
14|0M. Mischievous Math
首先发现若则直接输出1 2 3
即可,否则我们只需要找一组数使得其无法构造的数即可,这里选择了 17 41 91
15|0Postscript
下周应该还会找机会组织场VP,然后接下来的两个礼拜都有ICPC的网络赛,希望能好好发挥的说
__EOF__

本文链接:https://www.cnblogs.com/cjjsb/p/17677183.html
关于博主:复活的ACM新生,目前爱好仅剩Gal/HBR/雀魂/单机/OSU
版权声明:转载请注明出处
声援博主:欢迎加QQ:2649020702来DD我
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-09-04 CODEVS 1344 线型网络