[CF676C]Vasya and String(尺取法,原题)
2016-05-26 10:49
218 查看
题目链接:http://codeforces.com/contest/676/problem/C
原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.html
太菜了,昨晚光想着分块,却没考虑做尺取的时候,对于不需要变化的,那对计数器到k不做贡献。早上恍然大悟,5min改出来了…鶸一个。
原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.html
太菜了,昨晚光想着分块,却没考虑做尺取的时候,对于不需要变化的,那对计数器到k不做贡献。早上恍然大悟,5min改出来了…鶸一个。
/* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mind! ┛┗┛┗┛┃\○/ ┓┏┓┏┓┃ / ┛┗┛┗┛┃ノ) ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┃┃┃┃┃┃ ┻┻┻┻┻┻ */ #include <algorithm> #include <iostream> #include <iomanip> #include <cstring> #include <climits> #include <complex> #include <fstream> #include <cassert> #include <cstdio> #include <bitset> #include <vector> #include <deque> #include <queue> #include <stack> #include <ctime> #include <set> #include <map> #include <cmath> using namespace std; #define fr first #define sc second #define cl clear #define BUG puts("here!!!") #define W(a) while(a--) #define pb(a) push_back(a) #define Rint(a) scanf("%d", &a) #define Rll(a) scanf("%I64d", &a) #define Rs(a) scanf("%s", a) #define Cin(a) cin >> a #define FRead() freopen("in", "r", stdin) #define FWrite() freopen("out", "w", stdout) #define Rep(i, len) for(int i = 0; i < (len); i++) #define For(i, a, len) for(int i = (a); i < (len); i++) #define Cls(a) memset((a), 0, sizeof(a)) #define Clr(a, x) memset((a), (x), sizeof(a)) #define Full(a) memset((a), 0x7f7f, sizeof(a)) #define pi 3.14159265359 #define RT return #define lowbit(x) x & (-x) #define onenum(x) __builtin_popcount(x) typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef pair<int, int> pii; typedef pair<string, int> psi; typedef map<string, int> msi; typedef vector<int> vi; typedef vector<LL> vl; typedef vector<vl> vvl; typedef vector<bool> vb; const int maxn = 100010; int n, k; int a[maxn]; char s[maxn]; int main() { // FRead(); while(~Rint(n) && ~Rint(k)) { Rs(s+1); For(i, 1, n+1) { if(s[i] == 'a') a[i] = 0; else a[i] = 1; } int l = 1, r = 1; int cur = 0, ans = 0; while(1) { if(r > n) break; while(r <= n && cur <= k) { if(a[r] == 0) { if(cur == k) break; cur++; } r++; } if(r - l > ans) ans = r - l; while(l <= r && a[l] == 1) l++; cur--; l++; } int ret = ans; For(i, 1, n+1) { if(s[i] == 'a') s[i] = 'b'; else s[i] = 'a'; } For(i, 1, n+1) { if(s[i] == 'a') a[i] = 0; else a[i] = 1; } l = 1, r = 1; cur = 0, ans = 0; while(1) { if(r > n) break; while(r <= n && cur <= k) { if(a[r] == 0) { if(cur == k) break; cur++; } r++; } if(r - l > ans) ans = r - l; while(l <= r && a[l] == 1) l++; cur--; l++; } printf("%d\n", max(ans, ret)); } RT 0; }
相关文章推荐
- MPlayer安装
- lua 交换变量的值
- flume-ng与flume-og对比
- Asp.Net MVC 4 Web API 中的安全认证-使用OAuth
- 用 consul + consul-template + registrator + nginx 打造真正可动态扩展的服务架构
- 架构漫谈(八):从架构的角度看如何写好代码
- 倒谱分析与倒谱求法
- hdu 2795 billboard题解
- 正则表达式 - 匹配规则
- NPOI之Excel——合并单元格、设置样式、输入公式
- SmartForms 小技巧
- 2016-5-16 大数据处理
- NPOI之Excel——合并单元格、设置样式、输入公式
- Linux下修改Mysql的用户(root)的密码
- 单链表建立,插入,删除,查找,遍历操作!!!!
- apache的SSL端口被占用的解决方案
- 正则表达式 - 运算符优先级
- JS遮罩插件 -- JqLoad
- Android-TextView设置行间距与行高。
- 毕业生必须知道:干部身份、三方协议、派遣证、人事代理、户口迁移 、编制、工龄、签约、档案