Codeforces Round #378 (Div. 2) C D

时间:2023-03-09 16:28:21
Codeforces Round #378 (Div. 2) C D

在实验室通宵 一边做水题一边准备随时躲起来以免被门卫大爷巡查发现..结果居然没来..

本来以为可以加几分变个颜色..结果挂了CD...状态有点差...思维不太活跃 沉迷暴力不能自拔

D 给出n个长方体 两个长方体 如果有一面完全相同 可以粘上变成一个 在一个长方体中可以切割出一个球体 选择1或2个长方体以得到最大的球体 输出选择的编号

一开始没看范围打了一个n^2的暴力 超时后相出了map配On的算法 由于比较暴力的判断 写了六个复制粘贴..漫长的debug之后过了pretest之后还是wa在了27

其实比赛的时候 学长过来看了一眼就想出来了n的贪心..但是那时候想自己上一把紫233333...于是可爱的fst了...

正解 : 因为 能够切割出来的球体的r 取决于长方形中最小的一个边 如果要进行粘贴 肯定要使最小的边得到延长

所以先排序 把xyz从大到小排 再整体排序 这样 如果存在可以粘贴后可能获得更大球的两个长方体 他们肯定是相邻的(x y 都相等 我们需要把最小的z延长)

扫一遍序列 判断相邻的两个长方体能否粘贴 更新答案

C 给出n个数 相邻的两个数如果严格大小不同 大的可以吞掉小的 值相加 给出m个数 如果这m个数是不断吞噬到剩m个数之后的情况 能否给出一个吞噬的序列

虽然看了一眼n的范围就知道是暴力了 而且敲完D之后 等了一会C就过了一千多..于是自己也打了一个 还配了路径压缩 .. 一遍绝杀结果fst在了26... 赛后发现路径压缩姿势不对..不能压..

正解 : 首先快速排斥 判断能否变成给的序列 即 如果吞噬后的序列的第一个数是5 那么原序列的前几个连续数一定是5 这样严丝合缝的卡上去 然后让这些组成5的连续数进行内部的组合 记录ans

由于吞噬的条件是严格大于 每次我们都需要扫一遍这些连续数 找寻一个数 进行左右寻找(这时候是可以暴力扫来寻找的)左右的第一个相邻并且小于的

因为两个小的加起来可能就等于大的 导致崩溃 但其实让大的连续吞噬是可行的 那么每次暴力找寻最大的那些数 来依次进行暴力判断就好了...

以后又要陪桃桃打好久的div2了呢...