The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵)
时间:2019-09-09
本文章向大家介绍The 2019 Asia Nanchang First Round Online Programming Contest C(cf原题,线段树维护矩阵),主要包括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)
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+5; struct node{ int mat[5][5]; void init(){ memset(mat,0x3f,sizeof(mat)); } node operator + (const node &b){ node ret; for(int i=0;i<5;i++) for(int j=0;j<5;j++){ ret.mat[i][j]=N; for(int k=0;k<5;k++) ret.mat[i][j]=min(ret.mat[i][j],mat[i][k]+b.mat[k][j]); } return ret; } }tree[N<<2],ANS; char s[N]; void build(int root,int l,int r){ if(l==r){ for(int i=0;i<5;i++) for(int j=0;j<5;j++) if(j!=i) tree[root].mat[i][j]=N; else tree[root].mat[i][j]=0; if(s[l]=='8') tree[root].mat[4][4]=1,tree[root].mat[3][3]=1; else if(s[l]=='9') tree[root].mat[3][3]=1,tree[root].mat[3][4]=0; else if(s[l]=='1') tree[root].mat[2][2]=1,tree[root].mat[2][3]=0; else if(s[l]=='0') tree[root].mat[1][1]=1,tree[root].mat[1][2]=0; else if(s[l]=='2') tree[root].mat[0][0]=1,tree[root].mat[0][1]=0; return ; } int midd=(l+r)>>1; build(lson); build(rson); tree[root]=tree[root<<1]+tree[root<<1|1]; } 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)>>1; 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+1); for(int i=1,j=n;i<=n;i++,j--) s[i]=f[j]; //cout<<endl; build(1,1,n); while(t--){ int l,r; scanf("%d%d",&l,&r); int L=n-r+1,R=n-l+1; ANS.init(); for(int i=0;i<5;i++) ANS.mat[i][i]=0; query(L,R,1,1,n); int ans=ANS.mat[0][4]; if(ans==N) ans=-1; printf("%d\n",ans); } return 0; }
原文地址:https://www.cnblogs.com/starve/p/11494775.html
- Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
- 小程序火爆的因素
- Log4Net使用心得
- nginx通过https方式反向代理多实例tomcat
- Linux系统下yum镜像源环境部署记录
- 特斯拉vs凯迪拉克vs奔驰:三大汽车自动驾驶系统比拼
- Centos下添加静态路由(临时和永久有效)的操作记录
- python如何保证输入键入数字
- 微信小程序自定义数据分析试水
- 挂载银行前置机Ukey到windows server2012虚拟机的操作记录
- 文件上传速度查询方法
- “AS3.0高级动画编程”学习:第三章等角投影(上)
- su: 无法设置用户ID: 资源暂时不可用
- NumPY学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法