Good Bye 2020 题解(A-G)

89 篇文章 1 订阅

Good Bye 2020 题解(A-G)

昨天前6题全靠手速,G题漏写了一行代码最后也没有rush出来。😢

A

枚举底边就ok。

B

从后往前greedy,如果+1的话可以让答案+1就+1,不然不变。我一开始还卡了半天在想为啥是对的。。。

C

问题就是要满足:
∀ i , s i ≠ s i − 1 , s i ≠ s i − 2 \forall i,s_i\neq s_{i-1},s_i\neq s_{i-2} i,si=si1,si=si2
直接记录每一个位置是否修改,然后dp就行了。这玩意我做的时间比E还长???!

D

问题可以变为:

a n s w e r = ∑ w i × c i answer=\sum w_i\times c_i answer=wi×ci c i c_i ci表示和i相连的颜色数量。

然后搞一个priority_queue贪心就可以了。

E

比较基本,就是考虑每一位的贡献。

F

脑子里模拟一下两个位置有1然后插入线性基的过程,然后dsu随便搞搞就过了。注意:一个位置有1的比较特殊

G

考虑枚举哪些位置是t[i]哪些是s0,这只需要跑几次z就可以了。

然后问题就转变成给你一个t’判断是否可以通过 s 0 = O̸ s0=\not O s0=O变化得到。每次奇数位和偶数位拆开来, l e n log ⁡ l e n len\log len lenloglen时间复杂度就可以做到。z算法搞的时候一定要注意哪些情况需要翻转,哪些不要,我就是被这个坑了。qwq。

总时间复杂度为 O ( l e n × ∣ s 0 ∣ + l e n × log ⁡ l e n ) O(len\times |s_0|+len\times \log len) O(len×s0+len×loglen)

所有代码连接:

https://codeforces.com/submissions/MrGary/contest/1466
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值