考虑我们直接\(dp\)。

那么需要快速的求出一段是否可以被消掉只剩两端。

我们可以考虑反过来做的。

我们知道如果全为\(abab\)型或者\(aa\)型则无法消掉

那么我们要前缀和,以及遇到\(aa\)则另起一套,否则我们记录最后一段\(abab\)的\(f\)和。

#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define rep(i, x, y) for(int i = (x); i <= (y); i++)
#define per(i, x, y) for(int i = (x); i >= (y); i--) using namespace std; using pii = pair < int , int >;
using vec = vector < int >;
using veg = vector < pii >;
using ll = long long; int read() {
int x = 0; bool f = 0; char ch = getchar(); while(!isdigit(ch)) f |= ch == '-',ch = getchar();
while(isdigit(ch)) x = x * 10 + (ch ^ 48),ch = getchar(); return f ? -x : x;
} const int N = 2e5 + 10;
const int mod = 998244353; int a[N], s[N], n, f[N]; bool check(int l, int r) {
if(r > l + 1 && a[l] == a[l + 1]) return 1;
if(r > l + 1 && a[r] == a[r - 1]) return 1;
return 0;
} int pos[N]; int main() {
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
n = in; rep(i, 1, n) a[i] = in;
int l = 1, ts = 0;
rep(i, 1, n) {
if(i == 1) f[i] = 1;
if(a[i] == a[i - 1]) { l = i, ts = 0; f[i] = f[i - 1]; s[i] = (s[i - 1] + f[i]) % mod; continue; }
f[i] = (f[i] + s[i - 1] - s[l - 1]) % mod;
if(i - 3 >= l && a[i] == a[i - 2] && a[i - 1] == a[i - 3]) ts = (ts + f[i - 3]) % mod, f[i] = (f[i] + mod - ts) % mod; else ts = 0;
f[i] = (f[i] + mod) % mod;
s[i] = (s[i - 1] + f[i]) % mod;
cerr << i << " " << l << " " << f[i] << endl;
}
printf("%d\n", f[n]); return 0;
}

最新文章

  1. DNS解析过程详解
  2. 新浪微博UWP版-实现‘分享功能’的艰难路
  3. python 学习笔记十九 django深入学习四 cookie,session
  4. Sublime Text2 快捷键汇总
  5. Js特效--模仿滚动条(兼容IE8+,FF,Google)
  6. 字符集与Mysql字符集处理(一)
  7. ubuntu下ROS安装时sudo rosdep init和rosdep update的解决方法
  8. Codeforces Educational Codeforces Round 3 D. Gadgets for dollars and pounds 二分,贪心
  9. 文件夹IsShow字段为空
  10. DB2 递归
  11. Linux下的QQ折腾记
  12. ExtJs4 笔记(5) Ext.Button 按钮
  13. jq插件开发总结
  14. 简学Python第三章__函数式编程、递归、内置函数
  15. iOS 信号量
  16. PHP输出缓存ob系列函数
  17. Linux安装与基本命令
  18. Mac下创建证书失败
  19. phpStorm中如何不让其自动添加封闭大括号?
  20. [js] 渲染树构建、布局及绘制

热门文章

  1. vue 2.0源码学习笔记—new Vue ( Vue 初始化过程 )
  2. 初学Python-day1 运算符和数据类型
  3. 保护模式篇——TLB与CPU缓存
  4. Alpha-技术规格说明书
  5. Nginx高效核心
  6. 集合先从ArrayList开始
  7. 算法:九宫格问题--奇数阶魔方(Magic-Square)
  8. Python中根据时间自动创建文件夹
  9. 两个栈实现队列 牛客网 剑指Offer
  10. hdu 2586 How far away? (LCA模板)