2019ICPC南昌网络赛C Hello 2019
题意:给出一个字符串,每次询问一个区间[l,r],求使得这个区间含有9102但不含有8102最少要删掉几个字符
首先我们考虑将串反转,这样就变成了含有2019但不含有2018的问题了
我们构建一个状态数为5的自动机
状态0:字符集为空
状态1:字符集为2
状态2:字符集为20
状态3:字符集为201
状态4:字符集为2019
每加入一个字符就为对应的两个状态连一条边
两个字串合并我们只需对两个字符串的自动机进行一次dp即可
这样我们维护一个自动机的线段树,每个区间维护一个子串的自动机
查询的时候合并字串区间的自动机即可
AC代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=2e5+;
struct Matrix {
int a[][]; void init() {
memset(a, INF, sizeof(a));
for (int i = ; i < ; i++)a[i][i] = ;
}
void print()
{
for (int i = ; i < ; i++) {
for (int j = ; j < ; j++)cout << a[i][j] << " ";
cout << endl;
}
}
Matrix operator*(Matrix A) {
Matrix ret;
memset(ret.a,INF, sizeof(ret.a));
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
for (int k = ; k < ; k++)
//因为是倒过来的2019,合并自动机我们要反过来合并
ret.a[i][j] = min(ret.a[i][j], A.a[i][k] + a[k][j]);
return ret;
}
}tree[maxn<<]; char s[maxn];
void pushup(int rt) {
tree[rt] = tree[rt << ] * tree[rt << | ];
}
void build(int l,int r,int rt) {
if (l == r) {
tree[rt].init();
if (s[l] == '')tree[rt].a[][] = , tree[rt].a[][] = ;
else if (s[l] == '')tree[rt].a[][] = , tree[rt].a[][] = ;
else if (s[l] == '')tree[rt].a[][] = , tree[rt].a[][] = ;
else if (s[l] == '')tree[rt].a[][] = , tree[rt].a[][] = ;
else if (s[l] == '')tree[rt].a[][] = , tree[rt].a[][] = ;
return;
}
int m = (l + r) >> ;
build(l, m, rt << );
build(m + , r, rt << | );
pushup(rt);
} Matrix query(int L,int R,int l,int r,int rt) {
if (L <= l && r <= R)return tree[rt];
int m = (l + r) >> ;
Matrix res;
res.init();
if (L <= m)res = query(L, R, l, m, rt << );
if (R > m)res = res * query(L, R, m + , r, rt << | );
return res;
} int main() {
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int n, q, l, r;
cin >> n >> q;
cin >> (s + );
build(, n, );
while (q--) {
cin >> l >> r;
Matrix res = query(l, r, , n, );
cout << (res.a[][] == INF ? - : res.a[][]) << '\n';
}
return ;
}
2019ICPC南昌网络赛C Hello 2019的更多相关文章
- 线段树+单调栈+前缀和--2019icpc南昌网络赛I
线段树+单调栈+前缀和--2019icpc南昌网络赛I Alice has a magic array. She suggests that the value of a interval is eq ...
- 2019icpc南昌网络赛_I_Yukino With Subinterval
题意 给定一个序列,两种操作,单点修改,询问区间\([l,r]\)值域在\([x,y]\)范围内的连续段个数. 分析 原数组为\(a\),构造一个新的数组\(b\),\(b[i]=(a[i]==a[i ...
- 2019ICPC南昌网络赛总结
打的很崩的一场比赛.上来签到题我就wa了一发,感觉在梦游.然后我开了H题,队友开B题,f(n)=3f(n-1)+2f(n)傻子都知道矩阵快速幂,但是1e7的强制在线必须把logn优化,然后试图打表寻找 ...
- 2019icpc南昌网络赛
B. Fire-Fighting Hero (dijstra优先队列+bfs) 题意:刚开始看错题了,以为是k次dijkstra,但是wa了,后来队友指正后发现挺水的.求S到其它点的最短路的最大值an ...
- 2019南昌网络赛I:Yukino With Subinterval(CDQ) (树状数组套主席树)
题意:询问区间有多少个连续的段,而且这段的颜色在[L,R]才算贡献,每段贡献是1. 有单点修改和区间查询. 思路:46min交了第一发树套树,T了. 稍加优化多交几次就过了. 不难想到,除了L这个点, ...
- ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval
ACM-ICPC 2019南昌网络赛I题 Yukino With Subinterval 题目大意:给一个长度为n,值域为[1, n]的序列{a},要求支持m次操作: 单点修改 1 pos val 询 ...
- 2019 ICPC 南昌网络赛
2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 ...
- ACM-ICPC 2019南昌网络赛F题 Megumi With String
ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...
- 分治维护dp——19南昌网络赛C/cf750E
南昌网络赛,是cf的原题 第一次做到这种题,所以认真想了下,每次给一个询问[L,R],要求出这个区间里有2017子序列,但是不能有2016子序列需要删掉的最少元素个数 首先如果我们之询问一小段区间[L ...
随机推荐
- filter 在CSS用的效果
滤镜说明: Alpha:设置透明层次 blur:创建高速度移动效果,即模糊效果 Chroma:制作专用颜色透明 DropShadow:创建对象的固定影子 FlipH:创建水平镜像图片 FlipV:创建 ...
- 在规定的时间内出现动画.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 递归,装饰器,python常用内置方法
**递归** def calc(n): print(n) if int(n / 2) == 0: 条件判断 r ...
- px2rem-loader(Vue:移动端自适应,px自动转化)
1.下载lib-flexible npm i lib-flexible --save 2.引入lib-flexible import 'lib-flexible/flexible' 3.设置meta标 ...
- LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
Description Say you have an array for which the ith element is the price of a given stock on day i. ...
- 【记录】linux中不同颜色代表的含义
下面是linux约定不同类型文件默认的颜色 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表 ...
- 2018-2-13-win10-UWP-等级控件
title author date CreateTime categories win10 UWP 等级控件 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17: ...
- tail - 输出文件的末尾部分
SYNOPSIS(总览) ../src/tail [OPTION]... [FILE]... DESCRIPTION(描述) 在标准输出上显示每个FILE的最后10行. 如果多于一个FILE,会一个接 ...
- 【CSS】水平居中与垂直居中
有宽度的div水平居中 1.左右margin设为auto即可 .center { width: 960px; margin-left: auto; margin-right: auto; } 2.绝对 ...
- Sphinx + Read the docs theme
前言: 使用Sphinx 生成文档和使用 Read The Docs 的 readthedocs/sphinx_rtd_theme,假设是在Windows上运行并已安装好 python,可以执行pyt ...