HDU 6103
题意:
求最长的两个不相交的子序列,dis <= m ;
分析:
当时二分了答案,暴力匹配,TLE了,然后考虑了,O(n^2)预处理出所有区间 dis,然后答案是所有dis中>=m的最长长度吗?
不是,两个子区间可以不相邻。
还是二分答案,还是枚举两个区间的位置,这里已经是O(n^2)了,怎么判断他们的dis呢?
利用上面求出的任意两个区间的dis O(1)求出这两个子区间的dis,dis = d[i][j+mid-1] - d[i+mid][j-1];
int 的二维开不了!
字符串细节很多!!!
#include<bits/stdc++.h> using namespace std; const int maxn = ;
char str[];
unsigned short d[maxn][maxn];
int len, m; bool judge(int mid)
{ for(int i=; i<=len; i++)
{
if(i+mid*->len) break;
for(int j= i + mid; j<=len; j++)
{
if(j+mid->len) break;
if(d[i][j+mid-]-d[i+mid][j-]<=m)
return true;
}
}
return false;
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
scanf("%d", &m);
scanf("%s", str+);
len = strlen(str+); for(int i=; i<=len; i++)
d[i][i] = ; for(int k=; k<=len; k++)
{
for(int i=; i<=len; i++)
{
int j = i + k - ;
if(j>len) break;
if(j-i==) d[i][j] = abs(str[i]-str[j]);
else d[i][j] = d[i+][j-] + abs(str[i]-str[j]);
}
} int left = ,right=len/,ans=-;
while(left <=right)
{
int mid = (left + right) / ;
if(judge(mid))
{
ans = mid;
left = mid + ;
}
else
right = mid - ;
}
if(ans==-)
ans = ;
printf("%d\n", ans); }
return ;
}
HDU 6103的更多相关文章
- HDU 6103 Kirinriki(尺取法)
http://acm.hdu.edu.cn/showproblem.php?pid=6103 题意: 给出一个字符串,在其中找两串互不重叠的子串,计算它们之间的dis值,要求dis值小于等于m,求能选 ...
- 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− ...
- HDU 6103 Kirinriki (思维 双指针)
Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- 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= ...
- 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 ...
- hdu 6103(Kirinriki)
题目链接:Kirinriki 题目描述: 找两个不重叠的字符串A,B. 使得dis(A,B)<=m;\(dis(A,B)= \sum _{i=0}^{n-1} \left | A_i-B_{n- ...
- hdu 6103 Kirinriki (枚举对称中心+双指针)
Problem Description We define the distance of two strings A and B with same length n isdisA,B=∑(i=0 ...
- hdu some problems in Multi-University Training Contest
hdu 6103 Kirinriki #include<bits/stdc++.h> using namespace std; int n,m,ans; ]; void doit(int ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
随机推荐
- Linux批量杀掉挂掉的进程
$ `ps aux | grep test | grep -v grep | awk '{print $2}'` 杀掉含有test且不含有grep的进程,后面的 awk '{print $2}' 是进 ...
- 《The Python Standard Library》——http模块阅读笔记1
官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...
- Java基础17-成员变量、return关键字和多参方法
1.成员变量 在类中声明的变量为成员变量 //Dog类 class Dog{ String name;//成员变量 } public class Test1{ public static void m ...
- C#知识点提要
本篇博文主要对asp.net mvc开发需要撑握的C#语言知识点进行简单回顾,尤其是C# 3.0才有的一些C#语言特性.对于正在学asp.net mvc的童鞋,不防花个几分钟浏览一下.本文要回顾的C# ...
- 01-spring配置详解
1 bean元素 <!--将User对象交给spring容器进行管理 --> <!-- Bean元素:使用该元素描述需要spring容器管理的对象 class属性:被管理对象的完整类 ...
- python 批量ping服务器
最近在https://pypi.python.org/pypi/mping/0.1.2找到了一个python包,可以用它来批量ping服务器,它是中国的大神写的,支持单个服务器.将服务器IP写在txt ...
- [转] 微信小程序 页面跳转 传递参数
本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...
- c#-IO和序列化操作
IO 用到的命名空间:using System.IO; 文件和目录的管理! File类 FileInfo类 Directory类 DirectoryInfo类 操作文件的类! FileStream{ ...
- C#学习笔记9
1.多播委托:由与delegate关键字声明的委托,在编译后默认继承Delegate与MulticastDelegate类型,所以声明的委托自然就含有多播委托的特性,即一个委托变量可以调用一个方法链( ...
- 清除canvas画布内容--点擦除+线擦除
清空canvas画布内容 1.重置宽或高 由于canvas每当高度或宽度被重设时,画布内容就会被清空,因此可以用以下方法清空:(此方法仅限需要清除全部内容的情况) var c=document.get ...