ARC128D
考虑我们直接\(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;
}
ARC128D的更多相关文章
随机推荐
- Hive SQL的底层编译过程详解
本文结构采用宏观着眼,微观入手,从整体到细节的方式剖析 Hive SQL 底层原理.第一节先介绍 Hive 底层的整体执行流程,然后第二节介绍执行流程中的 SQL 编译成 MapReduce 的过程, ...
- C++控制台应用程序一闪而过的解决方法
Visual Studio 2017 C++控制台应用程序, 如果编译时发现黑框一闪而过,请按以下步骤操作: 右键project → 属性 → 链接器 → 系统 → 子系统,在下拉菜单中改为控制台.
- 好程序员打造核心教培天团,着力培养IT高级研发人才
随着数字化进程加快,各行各业数字化转型迫在眉睫,技术人才战略成为企业发力重点,IT高级研发人才已经成为企业的"核心资产",对企业发展起关键性作用,然而市场上高级研发人才极为稀缺.据 ...
- 【UE4 C++】 Config Settings配置文件(.ini)
简介 常见存储路径 \Engine\Config\ \Engine\Saved\Config\ (运行后生成) [ProjectName]\Config\ [ProjectName]\Saved\Co ...
- Java字符串转数字和数字转字符串
int转String有3种方式 (1)num + "" (2)String.valueOf(num) (3)Integer.toString(num) String转int有2种方 ...
- Spring Cloud Alibaba整合Sentinel
Spring Cloud Alibaba 整合 Sentinel 一.需求 二.实现步骤 1.下载 sentinel dashboard 2.服务提供者和消费者引入sentinel依赖 3.配置控制台 ...
- spring cloud Alibaba --sentinel组件的使用
sentinel组件 对于sentinel的前置知识这里就不多说了: 直接上代码: Release v1.8.1 · alibaba/Sentinel · GitHub 下载地址 springclo ...
- insertion-sort-list leetcode C++
Sort a linked list using insertion sort. C++ /** * Definition for singly-linked list. * struct ListN ...
- 修改openstack镜像--支持root密码登陆
一.前言 从openstack官方下载的云镜像一般都是普通用户密钥登陆,比如centos镜像的普通用户为centos,ubuntu镜像的普通用户为ubuntu,虽然密钥登陆系统相比密码登陆来说比较方便 ...
- (原创)WinForm中莫名其妙的小BUG——ComboBox 尺寸高度问题
一.前言 使用WinForm很久了,多多少少遇到一些小BUG. 这些小BUG影响并不严重,而且只要稍微设置一下就能正常使用,所以微软也一直没有修复这些小BUG. 本来并不足以写篇文章去记录,但是昨天遇 ...