The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)
题:https://nanti.jisuanke.com/t/41350
分析:先将字符串转置过来
状态转移,因为只有5个状态,所以 i 状态到 j 状态的最小代价就枚举【i】【k】->【k】【j】的最小值(0<=k<=4)
#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原题,线段树维护矩阵)的更多相关文章
- 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\), ...
- The 2019 Asia Nanchang First Round Online Programming Contest E. Magic Master
题目链接:https://nanti.jisuanke.com/t/41352 题目意思还是好理解的,看过的人不多,感觉是被通过量吓到了.其实就是个水题,反向模拟就好了, 用队列模拟,反向模拟,它要放 ...
- The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero
题目链接:https://nanti.jisuanke.com/t/41349 题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较. 灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点 ...
- The 2019 Asia Nanchang First Round Online Programming Contest The Nth Item
The Nth Item 思路: 先用特征根法求出通向公式,然后通向公式中出现了\(\sqrt{17}\),这个可以用二次剩余求出来,然后可以O(\(log(n)\))求出. 但是还不够,我们先对\( ...
- 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. 思路: ...
- E.Magic Master(The 2019 Asia Nanchang First Round Online Programming Contest)
直接模拟orhttps://blog.csdn.net/liufengwei1/article/details/100643831
- The 2019 Asia Nanchang First Round Online Programming Contest(B,E)
B. Fire-Fighting Hero 题意:一个消防员和多个队伍比赛,比较所有地方的最短路的最大值,消防员最后的值要乘1/C,求胜利的一方的最短路的最大值是多少.一直没读懂正确题意(内疚). 思 ...
- 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 ...
- The 2019 Asia Nanchang First Round Online Programming Contest C. Hello 2019(动态dp)
题意:要找到一个字符串里面存在子序列9102 而不存在8102 输出最小修改次数 思路:对于单次询问 我们可以直接区间dpOn求出最小修改次数 但是对于多次询问 我在大部分题解看到的解释一般是用线段树 ...
随机推荐
- ubuntu---【NVIDIA驱动 + CUDA 安装】不成功时的卸载方式
NVIDIA驱动 与 CUDA 安装不成功时,可以卸载,检查相关问题(配置.兼容性等),重新安装.这里记录一下,卸载方式.
- h5-边框图片
1.边框图片详解 <style> *{ ; ; } div{ width: 900px; height: 900px; margin: 100px auto; border: 133px ...
- 《Docekr入门学习篇》——Docker镜像制作
Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...
- 吴裕雄--天生自然Linux操作系统:Linux 磁盘管理
Linux磁盘管理好坏直接关系到整个系统的性能问题. Linux磁盘管理常用三个命令为df.du和fdisk. df:列出文件系统的整体磁盘使用量 du:检查磁盘空间使用量 fdisk:用于磁盘分区 ...
- session和token区别
分布式系统认证/授权目前分布式系统存在两种常用的认证授权方式:分布式session和token 1.session的概念 session中存放登录用户的个人信息,创建session时,随机生成一个se ...
- Java实战——简介
由于下学期要学习JavaEE所以打算将JavaSE的知识再重新学习一遍,打好基础的同时也希望自己有新的收获和更深刻的理解. 这次复习主要是参考廖雪峰老师的java教程,每学习完一章对其中一些要点进行总 ...
- Hibernate(四)--延迟加载(lazyload)
hibernate中的延迟加载(lazyload)分属性的延迟加载和关系的延迟加载 属性的延迟加载: 当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进 ...
- intellij debug模式提示 Method breakpoints may dramatically slow down debugging
之前不小心打了一个断点,然后项目长时间不能启动,保持一个加载的状态,并且提示Method breakpoints may dramatically slow down debugging,百度之后才知 ...
- 吴裕雄--天生自然 JAVA开发学习:多态
Parent p = new Child(); public class Test { public static void main(String[] args) { show(new Cat()) ...
- List集合分组依据集合中对象的属性
直接上代码 用到了Spring的BeanWrapper类 public static <T, K> Map<K, List<T>> groupByProperty( ...