两个等长字符串A,B的距离被定义为

给你一个字符串,问你对于所有长度相等的不相交子串对,其距离不超过m的前提下,最长的长度是多少。

枚举对称轴,两侧先贪心地扩展到最长,超过m之后,再缩短靠近对称轴的端点,如此反复进行,每次更新答案的时候,都用的是当前“近对称轴端点”固定时的最长值。

复杂度O(n^2)。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int Abs(int x){
return x<0 ? (-x) : x;
}
int T,m,n;
char a[5005];
int main(){
scanf("%d",&T);
for(;T;--T){
int ans=0;
scanf("%d%s",&m,a+1);
n=strlen(a+1);
for(int i=1;i<n;++i){
if(i==6){
i=6;
}
int sum=0;
int p1=i,p2=i+1,q1=i,q2=i+1;
while(p1>=1 && p2<=n){
while(sum<=m && p1>=1 && p2<=n){
sum+=Abs(a[p1]-a[p2]);
if(sum<=m){
ans=max(ans,q1-p1+1);
}
--p1;
++p2;
}
while(sum>m){
sum-=Abs(a[q1]-a[q2]);
--q1;
++q2;
if(sum<=m){
ans=max(ans,q1-p1);
}
}
}
}
for(int i=2;i<n;++i){
int sum=0;
int p1=i-1,p2=i+1,q1=i-1,q2=i+1;
while(p1>=1 && p2<=n){
while(sum<=m && p1>=1 && p2<=n){
sum+=Abs(a[p1]-a[p2]);
if(sum<=m){
ans=max(ans,q1-p1+1);
}
--p1;
++p2;
}
while(sum>m){
sum-=Abs(a[q1]-a[q2]);
--q1;
++q2;
if(sum<=m){
ans=max(ans,q1-p1);
}
}
}
}
printf("%d\n",ans);
}
return 0;
}

【枚举】【尺取法】hdu6103 Kirinriki的更多相关文章

  1. HDU 5358 尺取法+枚举

    题意:给一个数列,按如下公式求和. 分析:场上做的时候,傻傻以为是线段树,也没想出题者为啥出log2,就是S(i,j) 的二进制表示的位数.只能说我做题依旧太死板,让求和就按规矩求和,多考虑一下就能发 ...

  2. HDU 6103 Kirinriki(尺取法)

    http://acm.hdu.edu.cn/showproblem.php?pid=6103 题意: 给出一个字符串,在其中找两串互不重叠的子串,计算它们之间的dis值,要求dis值小于等于m,求能选 ...

  3. 2017ACM暑期多校联合训练 - Team 6 1008 HDU 6103 Kirinriki (模拟 尺取法)

    题目链接 Problem Description We define the distance of two strings A and B with same length n is disA,B= ...

  4. HDU - 6103 :Kirinriki(不错的尺取法)

    We define the distance of two strings A and B with same length n is dis A,B =∑ i=0 n−1 |A i −B n−1−i ...

  5. hdu6103[尺取法] 2017多校6

    /*hdu6103[尺取法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; int T, m; ]; void solve ...

  6. POJ 3061 (二分+前缀和or尺取法)

    题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...

  7. 51nod-1686 第K大区间(二分+尺取法)

    题目链接: 第K大区间 基准时间限制:1 秒 空间限制:131072 KB    定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. Input 第一行两个数 ...

  8. 【尺取法】Jurisdiction Disenchantment

    [尺取法]Jurisdiction Disenchantment PROBLEM 时间限制: 1 Sec 内存限制: 128 MB 题目描述 The Super League of Paragons ...

  9. 字符串----hiho字符串(尺取法)

    注意:这道题的解法和最短摘要一样,都是采用尺取法解决问题,注意这儿题目要求恰好包含,也就是说这个hiho字符串必须包含2个'h'.1个'i'和1个'o'.一个不能多,一个也不能少. import ja ...

  10. poj 2566"Bound Found"(尺取法)

    传送门 参考资料: [1]:http://www.voidcn.com/article/p-huucvank-dv.html 题意: 题意就是找一个连续的子区间,使它的和的绝对值最接近target. ...

随机推荐

  1. github: Permission denied (publickey). 问题解决方法

    部署服务器过程中想clone自己github中的库,结果出现Permission denied (publickey).的错误,解决方法是添加服务器公钥到github的settings->SSH ...

  2. ubuntu 下安装 activate-power-mode

    转自网络 被朋友圈中的atom的activate-power-mode 震撼到了,于是想试试. 步骤如下 首先安装atom: sudo add-apt-repository ppa:webupd8te ...

  3. python基础===* 解包,格式化输出和print的一点知识

    python3中的特性: >>> name = "botoo" >>> print(f"my name is {name}" ...

  4. redis cluster 实现

    Redis cluster是一个redis官方提供的集群功能,集群节点最小3个节点,配置比较多,记录下来,以供下次使用.我在这使用的redis 4.0.6. 因为最新的ruby redis扩展需要ru ...

  5. 机器学习方法(七):Kmeans聚类K值如何选,以及数据重抽样方法Bootstrapping

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入.我的博客写一些自己用得到东西,并分享给 ...

  6. hdu 1533(最小费用最大流)

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  7. Pow(x, n)——这也能用二分法!!!!

    Implement pow(x, n). 下面介绍一下解决该问题的几种方法以及要注意的地方: 1)最直观容易想到的方法就是用递归方法求n个x的乘积,注意考虑n的正负号,时间复杂度为O(n) class ...

  8. ELK日志处理

    ELK的工作原理: 使用多播进行机器发现同一个集群内的节点,并汇总各个节点的返回组成一个集群,主节点要读取各个节点的状态,在关键时候进行数据的恢复,主节点会坚持各个节点的状态,并决定每个分片的位置,通 ...

  9. AC日记——[POI2014]KUR-Couriers 洛谷 P3567

    [POI2014]KUR-Couriers 思路: 卡空间,sb题: 代码: #include <bits/stdc++.h> using namespace std; #define m ...

  10. TCP连接复用

    转自网络:看到一陌生名词,记录一下 TCP连接复用技术通过将前端多个客户的HTTP请求复用到后端与服务器建立的一个TCP连接上.这种技术能够大大减小服务器的性能负载,减少与服务器之间新建TCP连接所带 ...