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 ...
随机推荐
- PAT甲级——A1148 WerewolfSimpleVersion【20】
Werewolf(狼人杀) is a game in which the players are partitioned into two parties: the werewolves and th ...
- 《Hadoop学习之路》学习实践二——配置idea远程调试hadoop
背景:在上篇文章中按照大神“扎心了老铁”的博客,在服务器上搭建了hadoop的伪分布式环境.大神的博客上是使用eclipse来调试,但是我入门以来一直用的是idea,eclipse已经不习惯,于是便摸 ...
- SQL才是世界上最牛逼的语言!
身处互联网行业,SQL 可能是你需要掌握的核心技能之一. 最早的时候,SQL 作为一门查询数据库的语言,是程序员的必备技能,运维.开发.Web 以及数据等从业人员都需要用到 SQL,毕竟只有查询到正确 ...
- oracle数据库 唯一约束的创建与删除
1.创建索引: alter table TVEHICLE add constraint CHECK_ONLY unique (CNUMBERPLATE, CVIN, CPLATETYPE, DWQCH ...
- Window/Linux + Vim + MingW 配置
Windows: 首先安装Vim , MinGW,假设安装目录为D:\MinGW. 配置环境变量: LIBRARY_PATH=D:\MinGW\lib C_INCLUDE_PATH=D:\MinGW\ ...
- svnversion - 为工作代码产生一个紧缩的 (compat) 版本号
SYNOPSIS 总览 svnversion wc_path [trail_url] OVERVIEW 概述 Subversion 是一个版本控制系统,允许保存旧版本的文件和目录 (通常是源代码),保 ...
- Nginx基础优化
Nginx基础优化 1.隐藏nginx header版本号 1.1查看版本号 [root@Nginx ~]# curl -I http://www.yunwei.cn HTTP/1.1 200 OK ...
- sqldeveloper全部导出
点击Tools--Export User Objects 这种方式可以导出当前用户拥有的所有对象,包括表.视图.触发器.同义词等等,对于表,只能导出表结构(建表语句),不能导出数据, 选中要导出的对象 ...
- 【JS学习】慕课网8-17编程练习 网页的返回与跳转
编程练习 制作一个跳转提示页面: 要求: 1. 如果打开该页面后,如果不做任何操作则5秒后自动跳转到一个新的地址,如慕课网主页. 2. 如果点击“返回”按钮则返回前一个页面. 代码如下: 需要注意的是 ...
- 文件上传绕过WAF
文件上传 文件上传实质上还是客户端的POST请求,消息主体是一些上传信息.前端上传页面需要指定 enctype为multipart/from-data才能正常上传文件. 此处不讲各种中间件解析漏洞只列 ...