hdu6103 Kirinriki(trick+字符串)
题解:
考虑一开始时,左边从1开始枚举,右边从n开始枚举
我们可以得到一个最大的值k。
但是如果这样依次枚举,复杂度肯定是n^3,是不行的
考虑如何利用上一次的结果,如果我们把1和n同时去掉
就可以利用上一步的结果了(因为剩下的匹配仍然没有改变)
这样依次扫一遍,每次O(n)的时间可以得到O(n)对匹配对应的最大值
所以均摊复杂度就是O(n^2)
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char S[];
bool dp[][];
int T, m; int myabs(int x) { return x < ? -x : x; } int main()
{
cin>>T;
while(T--){
cin>>m;
cin>>S;
int ANS = , n = strlen(S);
memset(dp, , sizeof(dp));
for(int i = ; i < n; i++)
for(int j = n-; j >= ; j--){
if(i >= j) break;
if(dp[i][j]) continue;
int sx = i, sy = j, k = , ans = ;
while(sx < sy){
if(sx+k >= sy-k){
while(sx < sy){
dp[sx][sy] = ;
ANS = max(k, ANS);
k--;
sx++;
sy--;
}
break;
}
if(ans + myabs(S[sx+k]-S[sy-k]) <= m) ans += myabs(S[sx+k] - S[sy-k]), k++;
else{
while(ans + myabs(S[sx+k]-S[sy-k]) > m && k > ){
dp[sx][sy] = ;
ANS = max(k, ANS);
ans -= myabs(S[sx] - S[sy]);
k--;
sx++;
sy--;
}
if(ans + myabs(S[sx+k] - S[sy-k]) <= m){
ans += myabs(S[sx+k] - S[sy-k]);
k++;
} else { sx++; sy--; }
}
}
}
cout<<ANS<<endl;
}
return ;
}
hdu6103 Kirinriki(trick+字符串)的更多相关文章
- 【枚举】【尺取法】hdu6103 Kirinriki
两个等长字符串A,B的距离被定义为 给你一个字符串,问你对于所有长度相等的不相交子串对,其距离不超过m的前提下,最长的长度是多少. 枚举对称轴,两侧先贪心地扩展到最长,超过m之后,再缩短靠近对称轴的端 ...
- 2017 Multi-University Training Contest - Team 6—HDU6098&&HDU6106&&HDU6103
HDU6098 Inversion 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6098 题目意思:题目很短,给出一个数组,下标从1开始,现在输出一个 ...
- C/C++ 中带空格字符串输入的一些小trick
今天在重温 C++ 的时候发现自己存在的一些问题,特此记录下来. 我们可以看一下下面这段代码: #include <iostream> #include <cstdio> #i ...
- [LeetCode] Unique Substrings in Wraparound String 封装字符串中的独特子字符串
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
- [LeetCode] Group Shifted Strings 群组偏移字符串
Given a string, we can "shift" each of its letter to its successive letter, for example: & ...
- delphi字符串函数大全
转帖:delphi字符串函数大全 2009-11-17 16:43:55 分类: delphi字符串函数大全 ━━━━━━━━━━━━━━━━━━━━━首部 function StringToGUID ...
- [LeetCode] Reorganize String 重构字符串
Given a string S, check if the letters can be rearranged so that two characters that are adjacent to ...
- 从 RegExp 构造器看 JS 字符串转义设计
多年前我第一次入职腾讯的时候,DC 从杭州给我寄来了一本他刚翻译出炉的<高性能 JavaScript>.那段时间为了帮忙校对,我仔细阅读了书中的每一个段落,结果积累了不少 JavaScri ...
- Delphi中常用字符串处理函数
.copy(str,pos,num) 从str字符串的pos处开始,截取num个字符的串返回. 假设str为,)=,)='def' .concat(str1,str2{,strn}) 把各自变量连接起 ...
随机推荐
- python核心编程2 第十四章 练习
14-3.执行环境.创建运行其他Python脚本的脚本. if __name__ == '__main__': with open('test.py') as f: exec(f.read()) 14 ...
- java 时间转换去杠
public static String minusHyphen(String dateParam){ if(dateParam ==null) return null; if(dateParam.i ...
- 微信小程序INC自增自减MUL自乘问题
今天使用到微信小程序云开发中的数据库自增字段问题出现了错误 Uncaught (in promise) ReferenceError: _ is not defined 官方给出的INC方法文档 db ...
- python循环,函数
平常的网页会转换成ascll码,在转编译成十六进制a='http://www.mywebsit.com/?query=python&count=20'print(a)b=a.replace(' ...
- Python变量和循环
1.Python变量 比C语言,Java语言更加简洁,不需要加int等等类型定义,直接变量名 = 值,Python里甚至不需要分号.有些特定的不能当做变量名,变量只能由字母.数字和下划线组成,下划线可 ...
- 332. Reconstruct Itinerary
class Solution { public: vector<string> path; unordered_map<string, multiset<string>& ...
- 学习CSS
CSS教程 菜鸟教程 通过使用CSS我们可以大大提升网页开发的工作效率 什么是CSS? CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在 ...
- matlab-罗曼诺夫斯基准则剔除粗大值
罗曼诺夫斯基准则原理 罗曼诺夫斯基准则又称 t检验准则,其特点是首先删除一个可疑的的测得值,然后按 t分布检验被剔除的测量值是否含有粗大误差 罗曼诺夫斯基准则 1)选取合适的显著度a,选择合适的数 ...
- MySQL数据库服务器逐渐变慢分析与解决
一.检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可 ...
- springmvc常用jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans ...