CF做题记录--2023.11.21

1535C. Unstable String Problem - 1535C - Codeforces

t 组询问,每次给定一个仅包含字符 1 或 0 或 ? 字符串 s。定义一个子串是不稳定的当且仅当子串中任意相邻两数均不相同,如 101010⋯101010⋯ 或 010101⋯010101⋯。

我们称一个子串是好看的当且仅当我们可以将其中的 ? 换为 1 或 0 其中一种使得这个子串是不稳定的

求字符串中好看的子串个数之和。

思路

这也算dp题?

先思考如何判断一个序列[l,r]是否是不稳定的,发现只要[l,r-1]是不稳定的,且r和r-1不一样即可①那么可以dp。

初始化为全0

转移方程:

如果i为1,dp[i][1]=dp[i-1][0]+1

如果i为0,dp[i][0]=dp[i-1][1]+1

如果i为?,dp[i][1]=dp[i-1][0]+1,dp[i][0]=dp[i-1][1]+1

再考虑如何统计一个序列的贡献,对于序列 [1,r] 它的子序列有1+2+..+r,那么如果遍历右端点(从[1,1]到[1,r]),很显然每个序列都是不稳定,那么对于本次遍历,如果[1,ri]为不稳定①,那么贡献为ri,即dp[i]=dp[i-1]+1。

再考虑稳定序列对答案的影响。发现:对于序列01011010,可以视为0101+1010,且两半不相互影响,因此遍历时发现不稳定可以直接设置当前贡献为0,即dp[i]=0.

1548A. Web of Lies Problem - 1548A - Codeforces 

有 n 个人,q 组询问。一开始这 n 个人之间有 m 条边相连。

有 3 种操作:

  • 1 u v(1≤u,v≤n,u=v) 表示在 u 和 v 之间连一条边。保证 u 和 v 之间没有边。

  • 2 u v(1≤u,v≤n,u=v) 表示在 u 和 v 之间删一条边。保证 u 和 v 之间有边。

  • 3 表示执行以下操作直至不可再执行为止。定义一个人的强度为其编号。在每个 大小大于 1 的连通块中找到强度最小的人,将这个人及其所连的边一同删去。在所有操作执行完毕后,请你输出还剩下多少人。注意,每个 3 操作之间彼此独立。即删人只是暂时的,这次操作结束之后所有被删的人连同边会复活。

思路

考虑情况3:

可以发现,最后存活的一定是只连接比自己小的节点的点以及没有连接的点

那么只要一个点有比自己大的朋友,那么这个点就一定会死,再考虑到有删除操作,那么只要给每个点设置一个变量x储存比自己大的朋友的个数,每次更新时进行维护就可以,时间复杂度O(1)。

为避免重复计算,只有在x增加,并且0->1的情况才计算为死亡,即die++

每次删除边时,只有在x减少,并且1->0的情况,才视为复活,即die--

最后输出n-die

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值