Kirinriki

定义两个长度相等的字符串\(\{a_i\},\{b_i\}\)的距离为\(\sum_{i=1}^n|a_i-b_{n-i+1}|\)(其中n为字符串的长度),给出一个字符串\(\{s_i\}\),寻找其中两个长度相等连续的不相交的子串,让两个子串的长度不超过m的情况下,长度的最大值,\(n\leq 5000\)。

显然两个串的距离的计算类似回文子串,而两个子串显然会关于一个点对称,由于这个点不一定落在一个字符上,于是我们将字符的所有间隔都加上\('#'\),然后我们只要在字符上枚举这个中间点,然后把两个子串相对于中间点的外沿向两边尽量扩展,因为距离是随着长度单调递增的,如果发现距离扩展的超过m,就将内沿向外扩展,然后随便记录最大的长度,就可以做到\(O(n^2)\)了。

参考代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#define il inline
#define ri register
#define Size 5050
using namespace std;
char s[Size],s1[Size*2];
int main(){
int lsy,m,sl,sl1;scanf("%d",&lsy);
while(lsy--){
sl1=0,scanf("%d%s",&m,s+1),sl=strlen(s+1);
for(int i(1);i<=sl;++i)
s1[++sl1]='#',s1[++sl1]=s[i];
s1[++sl1]='#';int ans(0);
for(int i(1),j,k,sum,tot;i<=sl1;++i){
j=i+1,sum=tot=0;
for(k=i+1;k<=sl1&&2*i-k>0;++k){
sum+=abs(s1[k]-s1[2*i-k]),tot+=s1[k]!='#';
while(sum>m)
sum-=abs(s1[j]-s1[2*i-j]),
tot-=s1[j]!='#',++j;
ans=max(ans,tot);
}
}printf("%d\n",ans);
}return 0;
}

Kirinriki的更多相关文章

  1. HDU 6103 Kirinriki (思维 双指针)

    Kirinriki Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  2. hdu 6103(Kirinriki)

    题目链接:Kirinriki 题目描述: 找两个不重叠的字符串A,B. 使得dis(A,B)<=m;\(dis(A,B)= \sum _{i=0}^{n-1} \left | A_i-B_{n- ...

  3. 2017杭电多校第六场1008 Kirinriki

    传送门 Kirinriki Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  4. HDU 6103 17多校6 Kirinriki(双指针维护)

    Problem Description We define the distance of two strings A and B with same length n isdisA,B=∑i=0n− ...

  5. HDU 6103 Kirinriki(尺取法)

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

  6. 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= ...

  7. 【枚举】【尺取法】hdu6103 Kirinriki

    两个等长字符串A,B的距离被定义为 给你一个字符串,问你对于所有长度相等的不相交子串对,其距离不超过m的前提下,最长的长度是多少. 枚举对称轴,两侧先贪心地扩展到最长,超过m之后,再缩短靠近对称轴的端 ...

  8. 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 ...

  9. hdu6103 Kirinriki(trick+字符串)

    题解: 考虑一开始时,左边从1开始枚举,右边从n开始枚举 我们可以得到一个最大的值k. 但是如果这样依次枚举,复杂度肯定是n^3,是不行的 考虑如何利用上一次的结果,如果我们把1和n同时去掉 就可以利 ...

随机推荐

  1. 1.初步了解IOC容器

    学习地址:腾讯课堂   https://ke.qq.com/course/28986?_bid=167&_wv=3&from=iosapp 1.什么是IOC容器 定义: 1.是一个可以 ...

  2. usermod - modify a user account

    -a, --append Add the user to the supplementary group(s). Use only with the -G option. -G, --groups G ...

  3. POJ 1273 Drainage Ditches (网络流Dinic模板)

    Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover ...

  4. layer icon对应图标

    layer icon对应图标 信息框(msg.alert.open.confirm) icon:0 icon:1 icon:2 icon:3 icon:4 icon:5 icon:6 icon:16 ...

  5. Tomcat内存问题解决办法

    使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space 在JVM中如果98%的时间是用于GC且可用的 Heap si ...

  6. Kali 和 Centos、Windows三系统的安装事项!

    过年了,想在硬盘上直接装Kali Linux,就不用每次插U盘进LiveCD了,但是安装过程真的是!!What fucking word I can say!! 先是分区问题,ntfs有四个分区,其中 ...

  7. 导入csv 到mysql数据库

    1.查询导入数据存放位置 show variables like '%secure%'; +--------------------------+-----------------------+ | ...

  8. (18)C++ string和标准模板库

    一.stringl类 1.string构造函数 string a1("abc");//初始化字符串 cout<<a1<<endl;//abc , '#'); ...

  9. 72、salesforce call RESTful 的方式

    通过Chrome的Postman 来call salesforce的restful api https://login.salesforce.com/services/oauth2/token?gra ...

  10. 在Stimulsoft Reports.Net运行时修改报表的连接字符串

    怎么在Stimulsoft Reports.Net运行时修改报表的连接字符串?怎么改呀 C# StiReport report = new StiReport(); report.Load(" ...