2024 ICPC 上海站(BCDGI)
第一场区域赛,惨遭打铁。赛时只出了BCI。赛后补了DG,发现两道题都没有那么难,只能说还得加训。。。
B
补得最难绷的一题。先写了一个栈维护
我的做法就是维护当前正在搜索的路径,对于下一步搜索的方式,有几种可能性:(设当前走到了点
, 之间有边 -> 直接走 之间无边,但 可以直达一个未访问过的结点(即不在当前路径上的点)->一定非法,必须要加一条新边 之后的结点均已被搜索过 -> 回溯并重复1,2过程。若发现最后回溯到的所有点均无法继续走,则说明这个联通块内的点均已被搜索过。则由题可知直接对目标点所在的另一个联通块 即可,不需要加新边。
我的所有写法都离不开一个致命问题 —— 即需要线性(或者说暴力)维护当前搜索的路径(要想优化维护可能需要一些
最后还是屈服于了递归,写了一个递归来简化维护回溯路径的写法,直接就过了。
D
逆天构造题,借用其他博客上的方法补出来了。
可以发现,只要能变换到结尾两个数字都是
所以问题转化为找到一种操作方式,使得结尾两个数字都为
只考虑最后的
可行的情况一定为
而如何计算结尾
G
中位数二分 + 贪心
显然可以二分答案,设正在二分的答案为
具体地,对于
故将直线按照斜率分成
显然有一个贪心的想法:
作最大匹配的过程:尽可能把容易匹配的点先作匹配,而不是直接按照顺序作一一匹配(易错!)-> 双指针匹配即可。
代码方面要注意两个问题:
- 对于二分的
,每条直线得到的 要根据值的正负和直线斜率的正负做到正确取整。具体见代码。 - 二分边界要取大一些,这个暂时还没懂为什么。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战