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求出最小修改次数 但是对于多次询问 我在大部分题解看到的解释一般是用线段树 ...
随机推荐
- jstl中遍历Map
在jstl中遍历Map和遍历List与数组一样,都是使用forEach标签. 例子: <%@ page import="java.util.Map" %> <%@ ...
- 解决 springweb Filter 读取request body miss body
package com.lb.demo.listener; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...
- python pandas 画图、显示中文、股票K线图
目录: 1.pandas官方画图链接 2.标记图中数据点 3.画图显示中文 4.画股票K线图 5.matplotlib基本用法 6.format输出 6.format输出例子 eps_range=[0 ...
- 基于python的arcgis底图添加(转)
本文翻译自:Qingkai‘s Blog 当使用python的Basemap库绘制地图时,选择一个漂亮的底图会为图片增色不少,但是使用map.bluemarble().map.etopo()或者map ...
- Spring framework体系架构
Spring3.x 图中将spring分为5个部分:core.aop.data access.web.test,图中每个圆角矩形都对应一个jar,如果在maven中配置,所有这些jar的"g ...
- java 的HashMap底层数据结构
HashMap也是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在.在HashMap中,key-value总是会当做一个整体来处理,系统会根据 ...
- 微信支付第三方sdk使用
1.引入依赖:(对于依赖冲突自行解决) <dependency> <groupId>com.github.binarywang</groupId> <arti ...
- Go-map-字符串-指针-结构体
Maps 什么是 map ? 类似Python中的字典数据类型,以k:v键值对的形式. map 是在 Go 中将值(value)与键(key)关联的内置类型.通过相应的键可以获取到值. 如何创建 ma ...
- AI精灵
由于使用的CRM系统是Aras Innovator系统,所有的任务分配必须登入系统查看,故做出以下自动接受任务信息的小工具. 1.登入,实现自动记录上次登入的信息,支持多账户 登入成功后会以图标运 ...
- 回顾vim,ftp
常用服务器 ftp,ssh FTP是文件传输协议的简称,文传协议,用于internet上控制文件的双向传输 它也是一个应用程序,,基于不同的操作系统有不同的FTP应用程序,都遵循同一种协议以传输文件. ...