题: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. php魔术常量,_CLASS_,_METHOD_,_FUNCTION_

    _CLASS_: 返回当前类的类名 _METHOD_:返回当前类方法的方法名(并显示类的调用,类名::方法名) _FUNCTION_:返回当前函数的函数名 _FILE_:当前文件的绝对路径(包含_FI ...

  2. PAT Advanced 1110 Complete Binary Tree (25) [完全⼆叉树]

    题目 Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each ...

  3. c语言中指向整型指针的指针的理解

    /************************************************************************* > File Name: ptr_ptr_i ...

  4. 寒假day09

    今天看了论文的结构,定下了毕设论文的框架,刷了剑指offer的部分算法题.

  5. Linux-异步IO

    1.何为异步IO (1).几乎可以这么认为:异步IO就是操作系统用软件实现的一套中断响应系统. (2).异步IO的工作方法:我们当前进程注册一个异步IO事件(使用signal注册一个信号SIGIO的处 ...

  6. Windows下将Python源代码.py文件封装成exe可执行文件方法

    安装pyinstaller cmd中使用pip安装 pip install pyinstaller 同时会自动安装pywin32(pip真慢50M这里就走20KB),可以进行切换为国内源进行提速. 就 ...

  7. AttributeError: module 'selenium.webdriver.common.service' has no attribute 'Service'

    今天爬虫时需要使用到selenium, 使用pip install selenium进行安装. 可是一开始写程序就遇到了AttributeError: module 'selenium.webdriv ...

  8. Java线程(一)——创建线程的两种方法

    Thread 和 Runnable Java程序是通过线程执行的,线程在程序中具有独立的执行路径.当多条线程执行时,它们之间的路径可以不同,例如,一条线程可能在执行switch的一个case语句,另一 ...

  9. Python验证6174猜想

    num=int(input()) c=num while c!=6174:     digits=list(str(c))     digits.sort(reverse=True)#排列最大数和最小 ...

  10. JavaSE--Java 的基本程序设计结构

    Java 对大小写敏感 Java 中定义类名的规则很宽松.名字必须以字母开头,后面可以跟字母和数字的任意组合.长度基本上没有限制.但是不能使用 Java 保留字作为类名. 标准的命名规范为:类名是以大 ...