hdu6103 尺取 双指针 2017多校第六场1008
来源:互联网 发布:洛奇英雄传mac 编辑:程序博客网 时间:2024/05/17 07:24
题意
定义两个字符串的dis为两者字典序之差,一个字符串从前往后,另一个从后往前。现在给出一个m和一个字符串,要求求出最长的给定字符串的两个子串满足它们之间的dis小于等于m的长度。
题解
dis计算类似回文串,我们可以枚举对称中点,然后用尺取的思想用双指针实现。枚举对称中点时要注意有奇偶两种情况。
具体可以看代码注释
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 5e3+5;char str[maxn];int len,m,ans;//x为枚举子串开始左端点,y为右端点void solve(int x,int y){ //r为向两端扩展的长度,l为中点向两端缩减的长度 int dis=0,l=0,r=0; while(x-r>=0 && y+r<len) { //向两端扩展时dis满足 if(dis+abs(str[x-r]-str[y+r])<=m) { dis += abs(str[x-r]-str[y+r]); r++; ans = max(ans,r-l); } else //不满足 { dis -= abs(str[x-l]-str[y+l]); //从中点缩减 l++; } }}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d",&m); scanf("%s",str); len = strlen(str); ans = 0; for(int i=0;i<len;i++) { solve(i-1,i+1); //为奇 solve(i,i+1); //为偶 } printf("%d\n",ans); } return 0;}
阅读全文
1 0
- hdu6103 尺取 双指针 2017多校第六场1008
- HDU6103 Kirinriki(尺取法,2017 HDU多校联赛 第6场)
- hdu6103(尺取)
- hdu6103(尺取)
- 2017第六次多校联合hdu6103
- Hdu6103 Kirinriki(2017多校第6场)
- hdu6103 Kirinriki 2017多校1008 尺取法
- 2017多校联合第六场1008/hdu 6103
- 多校第六场1008---MU Puzzle
- hdu6103-Kirinriki (2017杭电多校联赛第6场)
- 噩梦多校6。。HDU6103 Kirinriki(字符串,尺取法)
- 2017多校训练6-1008:Kirinriki(HDU6103)
- HDU6103---Kirinriki(2017多校联赛:滑动窗)
- [快速幂,取模]HDU5363 多校联合第六场 Key set
- (多校第六场1001)HDU5793 A Boring Question(逆元,等比数列和取模)
- 多校练习第六场
- hdu6103Kirinriki(第六场尺取法取区间最大)
- hdu5358 First One 尺取法 多校联合第六场
- jbpm框架活动标志
- HDU-6057 Kanade's convolution(多项式FWT)
- 13.1.1 析构函数
- 判断给定森林中有多少棵树特别版(类似于邻接表)
- 51nod 1082 与7无关的数
- hdu6103 尺取 双指针 2017多校第六场1008
- HDU 6097 Mindis
- ROC曲线与AUC
- mysql常用语句
- 【opencv】VS2010+CMake重编译opencv2.4.10
- Ubuntu 无法识别方向键盘解决方法
- 51NOD 1090 三个数和为0 1267 4个数和为0 二分答案
- schedule方法和scheduleAtFixedRate方法的区别
- (ssm流程图详解)Spring+SpringMVC+Mybatis整合开发实践