当前位置: 首页 > news >正文

AtCoder Beginner Contest 310 E题 NAND repeatedly

E题:NAND repeatedly

标签:动态规划
题意:给定一个长度为 n n n 01 01 01字符串 A i A_i Ai,给定规则: 0 ⊼ 0 = 1 , 0 ⊼ 1 = 1 , 1 ⊼ 0 = 1 , 1 ⊼ 1 = 0 0⊼0=1,0⊼1=1,1⊼0=1,1⊼1=0 00=1,01=1,10=1,11=0

∑ i = 1 n ∑ j = i n f ( i , j ) \sum_{i=1}^n \sum_{j=i}^n f(i,j) i=1nj=inf(i,j) 1 < = i < = j < = n 1<=i<=j<=n 1<=i<=j<=n), f ( i , j ) = { A i ( i = j ) f ( i , j − 1 ) ⊼ A j ( i < j ) f(i,j)=\left\{\begin{matrix} A _ i&(i=j)\\ f(i,j-1)\barwedge A _ j\quad&(i\lt j) \end{matrix}\right. f(i,j)={Aif(i,j1)Aj(i=j)(i<j)
题解:显然我们可以通过 O ( n 2 ) O(n^2) O(n2)时间复杂度完成这道题要求,但是 n < = 1 0 6 n<=10^6 n<=106会超时。
d p [ i ] [ 0 / 1 ] dp[i][0/1] dp[i][0/1]:前 i i i个数字累计 n a n d ( ⊼ ) nand(⊼) nand 0 / 1 0/1 0/1的方案数。分以下两种情况考虑:

  1. 当前数字是 0 0 0 d p [ i ] [ 1 ] dp[i][1] dp[i][1]累计是 1 1 1的情况可以从前面 i − 1 i-1 i1累计是 0 0 0 1 1 1的情况转移过来,因为当前数字是 0 0 0,不管和 0 0 0 1 1 1 n a n d ( ⊼ ) nand(⊼) nand都是 1 1 1 d p [ i ] [ 0 ] dp[i][0] dp[i][0]累计是 0 0 0的情况初始化成 1 1 1
  2. 当前数字是 1 1 1 d p [ i ] [ 1 ] dp[i][1] dp[i][1]累计是 1 1 1的情况只能从前面 i − 1 i-1 i1累计是 0 0 0的情况转移过来,并且计数增加 1 1 1(算上自己本身的),因为 1 ⊼ 1 = 0 1⊼1=0 11=0 d p [ i ] [ 0 ] dp[i][0] dp[i][0]累计是 0 0 0的情况从前面 i − 1 i-1 i1累计是 1 1 1的情况转移过来。

最后把每个位置的 d p [ i ] [ 1 ] dp[i][1] dp[i][1]累加一下即可。
代码

#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10;
typedef long long ll;
ll dp[N][2];int main() {ll n, ans = 0;string s;cin >> n >> s;for (int i = 1; i <= n; i++) {if (s[i-1] == '0') {dp[i][1] = dp[i-1][0] + dp[i-1][1];dp[i][0] = 1;} else {dp[i][1] = dp[i-1][0] + 1;dp[i][0] = dp[i-1][1];}ans += dp[i][1];}cout << ans << endl;return 0;
}
http://www.lryc.cn/news/347550.html

相关文章:

  • 一款简易的免费抽奖软件
  • Kubernetes 监控管理
  • 哈希表第6/9题--四数相加II
  • 使用JavaScript将富文本HTML转换为纯文本
  • 2024-05-13 问AI: 介绍一下 google wavenet 声码器
  • 当代 Qt 正确的 安装方法 及 多版本切换
  • matlab使用教程(70)—修改坐标区属性
  • 手撕C语言题典——反转链表
  • 用lobehub打造一个永久免费的AI个人助理
  • Linux网络编程】传输层中的TCP和UDP(UDP篇)
  • Ciphey无法安装的解决办法
  • 交互之舞:Processing中的用户互动与响应设计
  • unetr_plus_plus(UNETR++、nnU-Net)系列数据处理理解汇总
  • 稻盛和夫《活法》读后感
  • Smurf 攻击是不是真的那么难以防护
  • ASP.NET之图像控件
  • 二级Java第五套真题(乱序版)含真题解析
  • 【C++】GNU Debugger (GDB) 使用示例
  • Qlik Sense :使用智能搜索Smart Search
  • React 学习-1
  • Libcity 笔记:自定义模型
  • 易图讯科技三维电子沙盘系统
  • 数据结构与算法学习笔记之线性表四---单链表的表示和实现(C++)
  • go语言切片slice使用细节和注意事项整理
  • C语言 | Leetcode C语言题解之第85题最大矩形
  • 2024-05-13四月初六周一
  • Android性能:高版本Android关闭硬件加速GPU渲染滑动卡顿掉帧
  • 对于FileUpload控件的一些bug
  • 哲学家就餐问题
  • Web安全:SQL注入之布尔盲注原理+步骤+实战操作