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 ...
随机推荐
- vue父组件与子组件之间的数据传递
父组件向子组件传递数据 父组件用数据绑定:子组件用props接收 <!-- test-vue-model父组件 --> <template> <div> <m ...
- 2059-authentication plugin 'caching_sha2_password"cnnot bt loaded :mysql8.0数据库连接不上(Navicat)
原因:8.0改变了 身份验证插件 , 打开 my.ini (或者my.cofg) 可以看到变更了 5.7及其以前的方式:mysql_native_password 办法: 1:命令行键入数据库: my ...
- Spring Cloud Alibaba
Spring Cloud Alibaba Dubbo Dubbo Dubbo 系列 [Dubbo 系列总结] [Dubbo 系列(01)最简使用姿态] [Dubbo 系列(02)整体架构] Dubbo ...
- 纯css设置元素过渡效果
1.首先,先设置一个div,待会我们使用css3给这个div设置过渡效果. 2.然后给div设置宽高和背景,这里我就设置成200像素,深粉色. 3.接着开始设置transition属性,通过这个属性就 ...
- python-装饰器初识,闭包
函数名的运⽤, 第⼀类对象 ⼀. 函数名的运⽤. 函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 1. 函数名的内存地址 def func(): print("呵呵 ...
- 标准模板库(STL)学习探究之Multimap容器
C++ Multimaps和maps很相似,但是MultiMaps允许重复的元素.(具体用法请参考map容器) 函数列表: begin() 返回指向第一个元素的迭代器 cle ...
- 小部分安卓手机 reload 等方法不执行
自己解析 url 来赋值刷新页面 方法如下:// location.href function updateUrl(url, key) { var key = (key || 't') + ...
- C# System.Windows.Forms.Panel
UserControl 定义的界面 输出到panel 实现界面切换
- 61. File类
IO技术主要作用是解决设备与设备之间的数据传输问题.比如:硬盘---->内存 内存的数据---->硬盘上 把硬盘的数据------>内存中 IO技术的应用场景: ...
- Jedis连接池的使用(转)
http://www.cnblogs.com/linjiqin/archive/2013/06/14/3135248.html 所需jar:jedis-2.1.0.jar和commons-pool-1 ...