题:https://nanti.jisuanke.com/t/41350

分析:先将字符串转置过来

状态转移,因为只有5个状态,所以 i 状态到 j 状态的最小代价就枚举【i】【k】->【k】【j】的最小值(0<=k<=4)

0:初始状态
1:2
2:20
3:201
4:2019
mat[i][j]表示状态i转移到j的最小代价
#include<bits/stdc++.h>
using namespace std;
#define lson root<<1,l,midd
#define rson root<<1|1,midd+1,r
const int N=2e5+;
struct node{
int mat[][];
void init(){
memset(mat,0x3f,sizeof(mat));
}
node operator + (const node &b){
node ret;
for(int i=;i<;i++)
for(int j=;j<;j++){
ret.mat[i][j]=N;
for(int k=;k<;k++)
ret.mat[i][j]=min(ret.mat[i][j],mat[i][k]+b.mat[k][j]);
}
return ret;
}
}tree[N<<],ANS;
char s[N];
void build(int root,int l,int r){
if(l==r){
for(int i=;i<;i++)
for(int j=;j<;j++)
if(j!=i)
tree[root].mat[i][j]=N;
else
tree[root].mat[i][j]=;
if(s[l]=='')
tree[root].mat[][]=,tree[root].mat[][]=;
else if(s[l]=='')
tree[root].mat[][]=,tree[root].mat[][]=;
else if(s[l]=='')
tree[root].mat[][]=,tree[root].mat[][]=;
else if(s[l]=='')
tree[root].mat[][]=,tree[root].mat[][]=;
else if(s[l]=='')
tree[root].mat[][]=,tree[root].mat[][]=;
return ;
}
int midd=(l+r)>>;
build(lson);
build(rson);
tree[root]=tree[root<<]+tree[root<<|];
}
void query(int L,int R,int root,int l,int r){
if(L<=l&&r<=R){
ANS=ANS+tree[root];
return ;
}
int midd=(l+r)>>;
if(L<=midd)
query(L,R,lson);
if(R>midd)
query(L,R,rson); }
char f[N];
int main(){
int n,t;
scanf("%d%d",&n,&t);
scanf("%s",f+);
for(int i=,j=n;i<=n;i++,j--)
s[i]=f[j]; //cout<<endl;
build(,,n);
while(t--){
int l,r;
scanf("%d%d",&l,&r);
int L=n-r+,R=n-l+;
ANS.init();
for(int i=;i<;i++)
ANS.mat[i][i]=;
query(L,R,,,n);
int ans=ANS.mat[][];
if(ans==N)
ans=-;
printf("%d\n",ans);
}
return ; }

The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)的更多相关文章

  1. The 2019 Asia Nanchang First Round Online Programming Contest

    传送门 A. Enju With math problem 题意: 给出\(a_1,\cdots,a_{100}\),满足\(a_i\leq 1.5*10^8\). 现在问是否存在一个\(pos\), ...

  2. The 2019 Asia Nanchang First Round Online Programming Contest E. Magic Master

    题目链接:https://nanti.jisuanke.com/t/41352 题目意思还是好理解的,看过的人不多,感觉是被通过量吓到了.其实就是个水题,反向模拟就好了, 用队列模拟,反向模拟,它要放 ...

  3. The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero

    题目链接:https://nanti.jisuanke.com/t/41349 题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较. 灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点 ...

  4. The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item

    The Nth Item 思路: 先用特征根法求出通向公式,然后通向公式中出现了\(\sqrt{17}\),这个可以用二次剩余求出来,然后可以O(\(log(n)\))求出. 但是还不够,我们先对\( ...

  5. H. The Nth Item(The 2019 Asia Nanchang First Round Online Programming Contest)

    题意:https://nanti.jisuanke.com/t/41355 给出N1,计算公式:A=F(N)Ni=Ni-1 ^ (A*A),F为类斐波那契需要矩阵快速幂的递推式. 求第k个N. 思路: ...

  6. E.Magic Master(The 2019 Asia Nanchang First Round Online Programming Contest)

    直接模拟orhttps://blog.csdn.net/liufengwei1/article/details/100643831

  7. The 2019 Asia Nanchang First Round Online Programming Contest(B,E)

    B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...

  8. The 2019 Asia Nanchang First Round Online Programming Contest B Fire-Fighting Hero(阅读理解)

    This is an era of team success, but also an era of heroes. Throughout the ages, there have been nume ...

  9. The 2019 Asia Nanchang First Round Online Programming Contest C. Hello 2019(动态dp)

    题意:要找到一个字符串里面存在子序列9102 而不存在8102 输出最小修改次数 思路:对于单次询问 我们可以直接区间dpOn求出最小修改次数 但是对于多次询问 我在大部分题解看到的解释一般是用线段树 ...

随机推荐

  1. VUE获取焦点

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Java之创建线程的方式四:使用线程池

    import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.c ...

  3. JavaScript学习总结(一)

    概述 前端三剑客,html.css.js. 这三种语言基本是前端开发必备的东西,那么你知道这三种语言分别负责的功能是什么吗? html:负责了一个页面的结构 css:负责页面的样式 JavaScrip ...

  4. c# 多线程——入门学习

    1. 概念介绍 1.1 线程 线程是操作系统能够进行运算调度的最小单位,包含在进程之中,是进程中的实际运作单位.一条线程指的时进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不 ...

  5. 内存管理-ARC

    推荐文章:http://blog.csdn.net/primer_programer/article/details/14442899 strong:强指针,指向对象,会持有对象,只有当对象无stro ...

  6. Postgresql的导表

    背景 前面已经介绍了常用的备份与恢复了,接下来介绍一下导表. 正文 很多情况,会有把数据导出的需求,轻重缓急总会有特别紧急的情况,但是又不是专业干db的人,还是记录下来,以防不时之需. 针对于导表,个 ...

  7. 试验指标|试验单位|均方|随机模型|固定模型|字母标记法|LSR|q检验|LSD|重复值|弥补缺失数据|可加性|平方根转换|对数转换|反正弦转化

    第五章 方差分析 试验指标是什么? 就是统计的测量值,eg:身高体重 试验单位( experimental unit )是什么? 实验载体,比如一只小白鼠 均方是什么? 就是方差 随机模型的τ有何特点 ...

  8. tensorflow实现卷积层的几种方式

    #coding:utf-8 #第一种实现 tf.nn import tensorflow as tf import tensorflow.contrib.slim as slim tf.reset_d ...

  9. python内置模块——time

    python中常见处理时间的函数除了之前介绍的datetime模块,还有一个time模块,其中最著名的一个方法就是sleep,其在线程.进程中常常得到应用. time模块中表示时间的方式一般有以下四种 ...

  10. Django整体架构

    Django整体架构 用户能够访问到的所有的资源 都是程序员提前暴露好的, 如果没有暴露 用户就永远访问不了 用户能够访问到的所有的资源 都是程序员提前暴露好的, 如果没有暴露 用户就永远访问不了 一 ...