ABC310E NAND repeatedly 题解

https://atcoder.jp/contests/abc310/tasks/abc310_e

一个奇怪的递归式 + \(N \le 10^6\), 试试动态规划

\(dp_{i,j}\) 为对于所有 \(1 \le l \le i\) 满足 \(f(l, i)=j\) 的数量, 其中 \(j \in \{0,1\}\).
最后答案就是 \(\sum\limits_{i=1}^{n}dp_{i,1}\)

分情况讨论:

  1. \(A_i=0\) 时, 考虑 \(dp_{i, 0}\):
    1. 对于任何 \(x \in \{0, 1\}, x \barwedge 0 \neq 0\), 所以加上 \(0\)
    2. 对于新增的 \(f(i, i)\), \(f(i,i) = A_i = 0\), 所以加上 \(1\)
      所以此时 \(dp_{i, 0} = 0 + 1 = 1\)
  2. \(A_i = 1\) 时, 考虑 \(dp_{i,0}\):
    1. 对于 \(x = 1\), \(x \barwedge 0 = 0\), 所以加上 \(dp_{i-1,1}\)
    2. 对于新增的 \(f(i, i)\), \(f(i,i) = A_i = 1\), 所以加上 \(0\)
      所以此时 \(dp_{i, 0} = dp_{i - 1, 1} + 0 = dp_{i - 1, 1}\)
  3. \(A_i=0\) 时, 考虑 \(dp_{i, 1}\):
    1. 对于任何 \(x \in \{0, 1\}, x \barwedge 0 = 1\), 所以加上 \(dp_{i - 1, 1} + dp_{i - 1, 0}\)
    2. 对于新增的 \(f(i, i)\), \(f(i,i) = A_i = 0\), 所以加上 \(0\)
      所以此时 \(dp_{i, 1} = dp_{i - 1, 1} + dp_{i - 1, 0} + 0 = dp_{i - 1, 1} + dp_{i - 1, 0}\)
  4. \(A_i = 1\) 时, 考虑 \(dp_{i,1}\)
    1. 对于 \(x = 0, x \barwedge 1 = 1\), 所以加上 \(dp_{i-1, 0}\)
    2. 对于新增的 \(f(i, i)\), \(f(i,i) = A_i = 1\), 所以加上 \(1\)
      所以此时 \(dp_{i, 1} = dp_{i-1, 0} + 1\)

总结一下, 就是

\[dp_{i,0} = \begin{cases} 1 &(A_i=0) \\ dp_{i-1, 1} &(A_i=1) \end{cases} \]

\[dp_{i,1} = \begin{cases} dp_{i-1,1} + dp_{i-1,0} &(A_i = 0) \\ dp_{i-1, 0} + 1 &(A_i=1) \end{cases} \]

还有最后一个问题, 初始化. 显然当 \(A_1=1, dp_{1, 1} = 1\), 当 \(A_1 = 0, dp_{1,0} = 1\). 换句话说就是 \(dp_{1,A_1}=1\)

CODE

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <array>
using namespace std;
#define DLN(x) cout << #x << "\t = " << x << '\n';
#define CDLN(x, l, r) cout << #x << "\t = [ "; for (int i = l; i <= (int)r; i ++) cout << x[i] << ' '; cout << "]\n";
#define CCDLN(x, l, r, what) cout << #x << "\t = [ "; for (int i = l; i <= (int)r; i ++) cout << (what) << ' '; cout << "]\n";
template <typename T>
using vec = vector<T>;#define int long longsigned main() {int n;string s;cin >> n >> s;vec<array<int, 2>> dp(n + 1);vec<int> arr(n + 1);for (int i = 0; i < s.size(); i ++) arr[i + 1] = s[i] - '0';dp[1][arr[1]] = 1;for (int i = 2; i <= n; i ++) {if (arr[i] == 0) {dp[i][1] = dp[i - 1][1] + dp[i - 1][0];dp[i][0] = 1;}else {dp[i][1] = dp[i - 1][0] + 1;dp[i][0] = dp[i - 1][1];}}int ans = 0;for (int i = 1; i <= n; i ++) ans += dp[i][1];cout << ans << '\n';return 0;
}

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

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

相关文章

深度学习之PyTorch核心使用(一)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MyBatis插入语句配置

MyBatis 插入语句配置 <sql id="Manage_field"> id,userName,passWord,realName</sql> <!-- 实体类属性--><sql id="Manage_insert">#{id},#{userName},#{passWord},#…

操作运算符

package _caseimport "fmt"// 关系运算 func RelationCase() {var a = 21var b = 10fmt.Println("a == b", a == b)fmt.Println("a != b", a != b)fmt.Println("a > b", a…

看 NOI2025 游记记

我很久以前看过 50+ 篇让我印象深刻的 NOI 游记,里面有句话让我在看游记前的某次梦里想起:“看游记好爽,心潮在荡漾”。 Day0(2025.7.31) 状态不是很好,看了几篇游记复习了一下。 Day1(2025.8.1) 早上 6:15 起…

社区裂变新蓝海:私域经济下的“轻创业”与信任生态 - 详解

社区裂变新蓝海:私域经济下的“轻创业”与信任生态 - 详解2025-09-17 21:58 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

得力 - Bruce

@echo off title Win10 游戏下载速度优化脚本 echo ===================================== echo Win10 游戏下载慢 - 优化工具 echo (请以管理员身份运行) echo ===================================== echo.:: 关…

短视频营销运营导师张伽赫,绳木传媒AI+短视频引领企业数字化变革

在当下企业数字化转型的浪潮中,短视频营销已成为关键赛道。张伽赫,这位深耕短视频领域十年的实战派导师,同时也是东莞绳木传媒的创始人,凭借 “AI+短视频” 的创新模式,在行业内异军突起,为众多传统企业提供了数…

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”

详细介绍:还在重启应用改 Topic?Spring Boot 动态 Kafka 消费的“终极形态”pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fa…

用 TensorFlow 和 CNN 实现验证码识别

在本教程中,我们将使用 TensorFlow 和 卷积神经网络(CNN) 来构建一个验证码识别系统。TensorFlow 是一个流行的深度学习框架,支持构建和训练神经网络。通过构建卷积神经网络(CNN),我们可以自动从图像中提取特征…

用 PyTorch 和 CNN 进行验证码识别

在本教程中,我们将使用 PyTorch 和 卷积神经网络(CNN) 来构建一个验证码识别系统。PyTorch 是一个广泛使用的深度学习框架,特别适合研究和原型设计。卷积神经网络(CNN)是处理图像数据的强大工具,它可以自动从图…

安卓 Google Maps 的启用和制作步骤

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

用 Keras 和 CNN 进行验证码识别

在本教程中,我们将利用 Keras 和 卷积神经网络(CNN) 来构建一个验证码识别系统。Keras 是一个高层神经网络 API,它运行在 TensorFlow、Microsoft Cognitive Toolkit(CNTK)或 Theano 之上,能够让我们快速构建深度…

从 Bank Conflict 数学表示看 Buffer 设计 Trade-Off

在并行处理器设计中,我们希望最大化访存吞吐,让更多的数据分布在不同的 bank,而非在一个 bank 中产生堵塞。一种场景是面对多应用并行,这往往可以通过划分上下文基地址隔离;而另一种场景则是高并行同一个数据共用…

被彼此笼罩 任泪水将我们缠绕 深陷入恶魔的拥抱 在阴冷黑暗处灼烧 吞下这毒药

方格染色grid 不难发现按着行顺着来,odt 那样维护即可。数字图graph 为什么本可做这个题做了很久(? 首先显然可以二分降低难度,然后就是观察。

mysql无法连接服务器的mysql #mysql8

1、云服务器要开放tcp 3306端口 登录云服务器提供商的,添加开放端口2、配置mysql允许非本地连接 编辑:/etc/my.cnf 或(如果配置了不生效) /etc/mysql/mysql.conf.d/mysqld.cnf 修改: ... [mysqld]bind-address = …

DAG 最小路径覆盖问题 笔记

原来我还学过这么个玩意。 一、笔记 P2764 最小路径覆盖问题 首先让 \(n\) 个点每个点都是单独的一条路径,接着考虑合并路径。 把每个点拆成只有入度的点和只有出度的点,合并就相当于连接一个只有出度的点和另一个只…

SP3D c# 开发独立的exe

此方法避免了启动S3D的过程 S3D.net API允许编写独立应用程序,即外部自动化TaskHost可执行文件。 在独立应用程序中可以编写哪些自动化?检查自动化-检查对象/数据,并采取一些行动,如生成报告文件/输出文件。数据挖…

python错误code

没有遍历完,就打印了结果模拟商品购物shopp_user = [] user_buy = [] for i in range(0,5):name_shop = input("请输入商品名称:")shopp_user.append(name_shop)for i in shopp_user:print(i)while True:us…

瑞 ping 我

ping瑞 ping 我

java八股文笔记 - 指南

java八股文笔记 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…