HDU 6103 Kirinriki(尺取法)
来源:互联网 发布:谷歌地图软件 编辑:程序博客网 时间:2024/05/17 02:04
题目地址
题意:给你一个字符串,把它尽可能的分割出两个长度相同的字符串,并且两个字符串的dis要小于等于m,求出这个长度。
dis的求法:
思路:因为字符串的长度之和只有20000,所以可以枚举中心点,然后对于每个条件通过尺取法去求出符合条件的长度
#include <iostream>#include <cstring>#include <string>#include <queue>#include <vector>#include <map>#include <set>#include <stack>#include <cmath>#include <cstdio>#include <algorithm>#define N 200010#define LL __int64#define inf 0x3f3f3f3f#define lson l,mid,ans<<1#define rson mid+1,r,ans<<1|1#define getMid (l+r)>>1#define movel ans<<1#define mover ans<<1|1using namespace std;string str;int ans, m;int len;void solve() { for (int i = 2; i <= str.length(); i++) {//遍历每个长度 int lens = i / 2; int l = 0, n = 0, sum = 0; for (int j = 0; j < lens; j++) {//遍历每个左端起点 sum += abs(str[j] - str[i - j - 1]); if (sum <= m) { n++; ans = max(ans, n); } else { n--; sum -= abs(str[j] - str[i - j - 1]);//还原回去上一个状态 sum -= abs(str[l] - str[i - l - 1]);//尺取法向中心移动一位 l++; j--; } } }}int main() { cin.sync_with_stdio(false); int T; cin >> T; while (T--) { cin >> m; cin >> str; ans = 0; len = str.length(); solve(); reverse(str.begin(), str.end()); solve(); cout << ans << endl; } return 0;}
阅读全文
1 0
- HDU 6103 Kirinriki (尺取法)
- HDU 6103 Kirinriki(尺取法)
- HDU 6103 Kirinriki(尺取法)
- HDU 6103 Kirinriki(尺取法 思维)
- hdu 6103 Kirinriki(尺取法)
- hdu 6103 Kirinriki(尺取法)
- HDU 6103 Kirinriki(尺取法)
- -----尺取法 hdu 6103-Kirinriki
- HDU 6103 Kirinriki【尺取法】【思维题】【好题】
- hdu 6103 Kirinriki dp+二分 或 尺取法
- 2017多校六 1008题 hdu 6103 Kirinriki 尺取法
- hdu6103 Kirinriki(尺取法)
- HDU_6103 Kirinriki 【尺取法】
- Kirinriki(HDU 6103)
- HDU 6103 Kirinriki (字符串翻转 尺取法 17多校第六场)
- HDU 6103 Kirinriki(尺取)
- HDU 6103 Kirinriki(尺取)
- 【HDU 6103 Kirinriki】 & 尺取
- 高级网络管理之bond与team
- mac破解百度网盘限速方法
- 将Android Studio默认布局ConstraintLayout切换成LinearLayout
- 常用的设计原则和设计模式
- Python中@符号的用法-1
- HDU 6103 Kirinriki(尺取法)
- spring mvc番外篇(四):用spring mvc生成验证码
- TOJ 3515(堆\优先队列)
- make, cmake, bazel
- 鸟哥的私房菜
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- [BZOJ1226][SDOI2009]学校食堂Dining-状压DP
- Java Web架构知识整理——记一次阿里面试经历
- 并发多线程