[ARC193B] Broken Wheel 做题记录

news/2025/3/9 9:07:42/文章来源:https://www.cnblogs.com/XP3301Pipi/p/18760251

[ARC193B] Broken Wheel 做题记录

[ARC193B] Broken Wheel

Solution

约定:每个点的编号都加一。

首先考虑问题的弱化版:所有点与 \(n+1\) 都没有连边。

Lemma 1:在这种情况下,把入度为 \(1\) 的点删除后,要么没有剩下的点,要么剩下的点的入度 \(0,2\) 交替。

正确性显然。

接下来我们考虑一般的情况。

可以发现,由于图上的边的数量一定,那么 \(1\sim n\) 中的点入度确定之后,\(n+1\) 号点入度也确定了。

普通点的处理是简单的,下面来考虑如何处理特殊点。

对于一个特殊点 \(x\),分四种情况讨论:

  1. \(d_x=3\),我们把 \(n\) 号点向 \(x\) 连的边删去,就变成了 普通 \(2\)
  2. \(d_x=2\),若 \(n\) 没有向 \(x\) 连边,那么就是普通 \(2\);否则,删去这条边之后就会变为 \(1\)。那么这样的 \(x\) 可以看作 可变 \(2\)
  3. \(d_x=1\),若 \(n\) 没有向 \(x\) 连边,那么就是普通 \(1\);否则,删去这条边之后就会变为 \(0\)。那么这样的 \(x\) 可以看作 可变 \(0\)
  4. \(d_x=0\),直接看作普通 \(0\)

那么题意转化为:

对于普通点,可以从 \(0,1,2\) 中选择;

对于特殊点,可以从 普通 \(0\)、可变 \(0\)、普通 \(2\)、可变 \(2\) 中选择。

一个环形序列合法,当且仅当通过调整 可变 \(0\) 与可变 \(2\) 的取值之后,把入度为 \(1\) 的点删除后,要么没有剩下的点,要么剩下的点的入度 \(0,2\) 交替。

对合法的环形序列计数。

那么合法的环形序列具有什么性质,能够让我们方便地进行 dp 呢?

Lemma 2:一个序列合法,当且仅当每两个 普通 \(0\) 之间存在一个 普通 \(2\) 或 可变 \(2\),每两个 普通 \(2\) 之间存在一个 普通 \(0\) 或 可变 \(0\)

必要性显然。

再证充分性。我们把每两个普通 \(0\) 拿出来,若它们之间没有可变 \(0\),那么就随便挑一个可变 \(0\) 出来变为 \(0\),其他的都变为 \(1\);否则,所有的可变 \(0\) 都变为 \(1\)。对于普通 \(2\) 同理。那么得出的序列一定合法。

有了这个性质,我们就能 dp 了。

首先考虑链怎么做。设 \(f_{x,0/1/2,0/1}\) 表示到了第 \(x\) 个点,上一个普通 \(0/2\) 是 普通 \(0\) / 没出现 / 普通 \(2\),上一个普通 \(0/2\) 后面有没有出现可变 \(0/2\)。转移枚举所有情况即可。

接下来我们考虑怎么把链的两段接起来。

我们摒弃第二维的 \(1\)。先给 \(f_0\) 钦定一个初始状态,最后只保留 \(f_n\) 对应的状态即可。

但我们此时没有办法统计到不存在普通 \(0/2\) 的情况。那么我们单独计算这一部分的答案,设特殊点的数量为 \(c\),这一部分的答案就是 \(2^c\)

此时还有一个问题:转移的过程中可能也不会选择普通 \(0/2\),直接回到环的起点。那么我们再加一维 \(0/1\) 表示当前有没有选择普通 \(0/2\) 即可。

int n;
char a[N];const ll mod=998244353;inline ll Mod(ll x){return (x>=mod)?(x-mod):(x);}inline void Add(ll &x,ll y){x=Mod(x+y);}ll ans,f[N][3][2][2];void DpSolve(){for(int i=0;i<=n;i++){for(int j=0;j<=1;j++){Add(f[i+1][0][0][1],Mod(f[i][2][0][j]+f[i][2][1][j])); //普通0Add(f[i+1][0][0][1],f[i][0][1][j]);//普通0Add(f[i+1][2][0][1],Mod(f[i][0][0][j]+f[i][0][1][j])); //普通2Add(f[i+1][2][0][1],f[i][2][1][j]);//普通2if(a[i+1]=='0'){Add(f[i+1][0][0][j],f[i][0][0][j]);//1 Add(f[i+1][0][1][j],f[i][0][1][j]);Add(f[i+1][2][0][j],f[i][2][0][j]);Add(f[i+1][2][1][j],f[i][2][1][j]);}else{Add(f[i+1][0][0][j],f[i][0][0][j]);//可删0 Add(f[i+1][0][1][j],f[i][0][1][j]);//可删0 Add(f[i+1][2][1][j],Mod(f[i][2][0][j]+f[i][2][1][j]));//可删0 Add(f[i+1][2][0][j],f[i][2][0][j]);//可删2Add(f[i+1][2][1][j],f[i][2][1][j]);//可删2 Add(f[i+1][0][1][j],Mod(f[i][0][0][j]+f[i][0][1][j]));//可删2}}}
}signed main(){read(n);scanf("%s",a+1);ll res=1;for(int i=1;i<=n;i++)if(a[i]=='1') res=(Mod(res<<1));ans=res;memset(f,0,sizeof(f));f[0][0][0][0]=1; DpSolve(); Add(ans,f[n][0][0][1]);memset(f,0,sizeof(f));f[0][0][1][0]=1; DpSolve(); Add(ans,f[n][0][1][1]);memset(f,0,sizeof(f));f[0][2][0][0]=1; DpSolve(); Add(ans,f[n][2][0][1]);memset(f,0,sizeof(f));f[0][2][1][0]=1; DpSolve(); Add(ans,f[n][2][1][1]);printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/895786.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

又一国产AI爆火!Manus强势炸场,邀请码申请方法,看这一篇就够了!

3月6日凌晨,一款名为Manus的国产AI产品横空出世,迅速霸榜社交平台热搜。其内测邀请码在二手交易平台被炒至5万元天价,甚至出现标价10万元的卖家,我的个乖乖啊。 究竟是什么让Manus如此火爆?今天我们来聊一聊。 Manus是个啥? 与ChatGPT、DeepSeek等传统对话式AI不同,Manu…

VMware ESXi 6.7U3v macOS Unlocker OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 6.7U3v macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版)VMware ESXi 6.7U3v macOS Unlocker & OEM BIOS 2.7 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) 此版本解决的问题:VMware Host Client 无法将现有虚拟磁盘 (…

读DAMA数据管理知识体系指南14数据库环境

读DAMA数据管理知识体系指南14数据库环境1. ACID 1.1. 缩写词ACID是在20世纪80年代末期出现的一个合成词,含义是保证数据库事务可靠性不可或缺的约束 1.2. 原子性(Atomicity)1.2.1. 所有操作要么都完成,要么一个也不完成1.2.2. 如果事务中的某部分失败,那么整个事务就都会失…

opera在搜索引擎页面,无法使用用户脚本

如图只要是搜索结果页面都不能激活扩展。 我使用了链接助手这个在任何页面都能使用的脚本只有暴力猴提了一嘴,搜索引擎上完全搜索不到类似的问题。我在设置中找了半天,并没有找到类似权限的字样。于是去找了github的issue。 最终误打误撞的 https://github.com/dhowe/AdNause…

python第一天

内容目录 1.python语法注释标注就是对代码进行解释 -方式一:加井号例如#巴拉巴拉即可 -方式二:英文输入法连按三下单引号即可 -方式三:英文输入法连按三下shift+引号""""""即可 例如:2.变量与常量python中没有固定的常量,常量即时变量只不过…

Trae中git bash异常

情况 我装上Trae的时候,电脑的终端出现了很多问题,首先是PATH环境变量,某些变量由于空格等原因被阻隔。git bash环境变量 echo $PATH /c/Users/acer/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/c/Users/acer/AppData/Local/Programs/Trae/resources/app/bin:undefined…

KDE+wayland的Arch初始化

前言 arch的中文百科,很多时候能派上用场,或者善用bing和AI。 https://wiki.archlinuxcn.org/wiki/Wayland 下面这是我用的系统。 https://endeavouros.com/ 劝退如果对linux没有执着,建议还是用windows。linux作为非商业的系统,很多软件只会出win版和mac版本。linux系统分…

AI PPT与AI 文章写作

1. AI文章豆包AI写文章官网例子 deepseek和ima(基于知识库问答:方便参考文献),和波尔学术(学术绘图),和糖果果AI(学术绘图)视频来源:`全网最全deepseek科研使用指南|AI写论文避坑指南!`脑图总结(利用包阅AI总结视频)文章去除AI味视频来源:抖音@抖音科技 - 如何去…

01-计算机网络引入

目录计算机网络分类按范围进行分类按使用者分类互联网和互联网络一样吗?互联网的边缘部分和核心部分什么是ISP电路交换 & 分组交换网络性能指标速率带宽(bandwidth)吞吐量(Throughput)时延(Delay或Latency)发送时延(传输时延)传播时延处理时延排队时延总时延丢包率…

Spring -- 进阶

IOC/DI配置管理第三方bean 管理druid数据源pom.xml引入依赖<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency&g…

基于生物地理算法的MLP多层感知机优化matlab仿真

1.程序功能描述 基于生物地理算法的MLP多层感知机优化matlab仿真,完成随机数据点的趋势预测,并输出优化收敛曲线。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 (完整程序运行后无水印) 3.核心程序% 迭代训练 for i = 1:1000wdh = (wdo(:, 2:end) .* ((1-yh…

【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章:《基于FPGA的4ASK调制解调系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运行后…