Kirinriki HDU
来源:互联网 发布:js数组的length方法 编辑:程序博客网 时间:2024/06/06 02:47
Kirinriki
We define the distance of two strings A and B with same length n is
The difference between the two characters is defined as the difference in ASCII.
You should find the maximum length of two non-overlapping substrings in given string S, and the distance between them are less then or equal to m.
Each case begins with one line with one integers m : the limit distance of substring.
Then a string S follow.
Limits
Each character in the string is lowercase letter,
15abcdefedcb
5
题目大意:给定一个字符串,问最大字串长度为多少的时候交叉相减的绝对值之和小于等于输入的m,注意,子串不能重合 。
题目分析:这道题目暴力肯定会超时,所以我们这里用到了二分的思想,先预处理总串中所有的字符串的长度,然后运用二分,因为任意两个不相交子串,都可以看作处于以某个位置为中心的对称位置上,枚举这个中心即可。
#include<bits/stdc++.h>using namespace std;const int maxn = 5005;char s[5005];unsigned short dp[maxn][maxn];///这里用int会超内存,所以用unsigned shortint len, m;bool check(int mid)///用dp[i][j]数组记录字串i-j的dis, ///前半部分是A串,后半部分是B串,然后枚举n,二分查找{ for(int i = 1; i <= len; i++) { if(i + mid*2-1 > len) break; for(int j= i + mid; j <= len;j++) { if(j + mid - 1 > len) break; if(dp[i][j+mid-1] - dp[i+mid][j-1] <= m) return true; } } return false;}int main(){ int t; scanf("%d", &t); while(t--) { scanf("%d", &m); scanf("%s", s+1); len = strlen(s+1);///输入字符串的长度 for(int k = 1; k <= len; k++)///要求的字符串的长度 { for(int i = 1; i <= len; i++)///字符串的起始位置 { int j = i + k - 1; ///字符串的终点位置 if(j > len) break; if(i == j) dp[i][j] = 0; else if(j - i == 1) dp[i][j] = abs(s[i] - s[j]); else dp[i][j] = dp[i+1][j-1] + abs(s[i] - s[j]); } } int left = 1, right = len/2, mid, ans; while(left <= right)///二分,枚举中心 { mid = (left + right) >> 1; if(check(mid)) { ans = mid; left = mid + 1; } else right = mid - 1; } printf("%d\n", ans); } return 0;}
阅读全文
0 0
- Kirinriki HDU
- Kirinriki HDU
- HDU-Kirinriki
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- HDU 6103 Kirinriki
- hdu 6103 -Kirinriki
- hdu 6103 Kirinriki
- HDU 6103 Kirinriki 【dp】
- hdu 6103 Kirinriki
- HDU 6103 Kirinriki
- Kirinriki(HDU 6103)
- HDU-6103 Kirinriki
- hdu 6103 Kirinriki
- HDU 6103Kirinriki
- hdu--6103--Kirinriki
- 【思维】hdu 6103 Kirinriki
- 目标跟踪算法概述
- java导出Excel之多个sheet
- 修改Android studio新建activity默认根布局
- liunx基础背景与操作指令
- 51nod 1305 Pairwise Sum and Divide
- Kirinriki HDU
- 一文读懂大数据:Hadoop,大数据技术及相关应用
- hibernate 用法
- FlexboxLayout-----Android弹性布局
- 解雇IE补丁操作方法
- Jetson TX2板载相机opencv调用打开
- Android apk签名原理
- 《西瓜书》笔记10:降维与度量学习(一)
- Hadoop-HBase各版本兼容矩阵-20170814