题意:给定一个长度为 n 的序列,求有多少个子序列满足该子序列内任意相邻 3 个数的和为偶数。

只与奇偶有关,所以可以把状态转化为 01 的。

设 \(f[i][x][y]\) 表示在前 i 个数中,最后一位为 x,倒数第二位为 y 的方案数。

\[f[i][x][y] = f[i - 1][x][y] + w(a[i])
\]

$ w(a[i]) $ 为以 a[i] 结尾的方案数。

\[w(a[i]) = \sum f[i - 1][y][z] \ \ \ \ (a[i] + y + z) \% 2 == 0
\]

最后需要把 \([a[i], y]\) 的对数加入 \(f[i][a[i]][y]\),以此更新下个数。

#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i <= (b); ++ i)
#define per(i, a, b) for(int i = (a); i >= (b); -- i)
#define pb emplace_back
#define All(X) X.begin(), X.end()
using namespace std;
using ll = long long;
constexpr ll P = 998244353; int n, f[200005][2][2], cnt[2];
int ans; int main() {
ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
cin >> n;
rep(i, 1, n) {
int x; cin >> x;
x &= 1;
rep(y, 0, 1) rep(z, 0, 1) if((x + y + z) % 2 == 0) {
f[i][x][y] = (f[i][x][y] + f[i - 1][y][z]) % P;
ans = (ans + f[i - 1][y][z]) % P; // 以 a[i] 结尾的方案的贡献
} rep(y, 0, 1) rep(z, 0, 1) f[i][y][z] = (f[i][y][z] + f[i - 1][y][z]) % P; // 前缀和为前i个数的方案
rep(y, 0, 1) f[i][x][y] = (f[i][x][y] + cnt[y]) % P; // 统计 [x, y] 二元组的个数,由此更新 i + 1
++ cnt[x];
}
cout << ans;
return 0;
}

随机推荐

  1. 并发CPU伪共享及优化

    伪共享 缓存系统中是以缓存行(cache line)为单位存储的.缓存行是2的整数幂个连续字节,一般为32-256个字节.最常见的缓存行大小是64个字节.当多线程修改互相独立的变量时,如果这些变量共享 ...

  2. KingbaseES V8R6备份恢复案例之---备份crond计划任务的调整

    案例说明: 在KingbaseES V8R6数据库通常备份建立的crond任务,默认由root用户建立,写入到/etc/cron.d/KINGBASECRON文件中,在有的生产环境限制了普通用户使用r ...

  3. copy 导入包含特殊符号的文本

    客户提供了一份数据记录需要导入数据库,但是文本中有一个列的内容是反斜杠"\" ,因为""是特殊的转义字符,需要使用两个"\"才能表示,如果直 ...

  4. KingbaseES 配置root.sh实现数据库服务开机自启动

    案例说明: KingbaseES数据库在部署完成后,支持数据库服务开机自启动,部署完成后,root用户(Linux)执行安装软件目录下的root.sh脚本后,可以实现数据库服务开机自启动. 适用版本: ...

  5. KingbaseES sys_restore 恢复表时默认不包括表上的索引

    前言 最近碰到一个案例,在使用sys_restore恢复指定表时,默认不恢复表上的索引,如果想恢复需要单独指定. 测试过程 [](javascript:void(0) 查看表的有关属性:test=# ...

  6. #长链剖分#CF208E Blood Cousins

    题目 给你一片森林,每次询问一个点与多少个点拥有共同的 \(K\) 级祖先 分析 设\(dp[x][d]\)表示以\(x\)为根节点时深度为\(d\)的个数, 那么\(dp[x][d]=\sum\{d ...

  7. RabbitMQ 10 头部模式

    头部模式是根据头部信息来决定的,在发送的消息中是可以携带一些头部信息的(类似于HTTP),可以根据这些头部信息来决定路由到哪一个消息队列中. 定义配置类. import org.springframe ...

  8. Python基于Excel数据加以反距离加权空间插值并掩膜图层

      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法. 1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录有 ...

  9. WPF 像CSS一样使用 Font Awesome 图标字体

    WPF 像CSS一样使用 Font Awesome 图标字体 编写目的 WPF中使用这种图标字体不免会出现可读性差的问题,现阶段网络上有的大部分实现方式都是建立枚举,我感觉这样后续维护起来有些麻烦,需 ...

  10. Tailwind CSS 使用指南

    0x01 概述 (1)简介 Tailwind CSS 官网:https://www.tailwindcss.cn/ Tailwind CSS 是一个 CSS 框架,使用初级"工具" ...