【CF676C】Vasya and String(二分查找,线性扫描尺取法)
题意:
给出一个长度为n的字符串,只有字符'a'和'b'。最多能改变k个字符,即把'a'变成'b'或把'b'变成'a'。
问改变后的最长连续相同字符的字串长度为多少。
首先是二分查找,好想也好写
var s:array[..]of longint;
ch:ansistring;
n,k,i,l,r,mid,last,ans:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; begin
//assign(input,'1.in'); reset(input);
//assign(output,'1.out'); rewrite(output);
readln(n,k);
readln(ch);
for i:= to n do
begin
s[i]:=s[i-];
if ch[i]='b' then inc(s[i]);
end;
ans:=;
for i:= to n do
begin
l:=i; r:=n; last:=i;
while l<=r do
begin
mid:=(l+r)>>;
if s[mid]-s[i-]<=k then begin last:=mid; l:=mid+; end
else r:=mid-;
end;
ans:=max(ans,last-i+);
end;
fillchar(s,sizeof(s),);
for i:= to n do
begin
s[i]:=s[i-];
if ch[i]='a' then inc(s[i]);
end;
for i:= to n do
begin
l:=i; r:=n; last:=i;
while l<=r do
begin
mid:=(l+r)>>;
if s[mid]-s[i-]<=k then begin last:=mid; l:=mid+; end
else r:=mid-;
end;
ans:=max(ans,last-i+);
end;
writeln(ans);
//close(input);
//close(output);
end.
然后是线性扫描,ACM叫做尺取法,机房大神叫伸头缩尾法
l循环后还要+1是因为要到下一段连续区间的开头,而当前连续间的字母和下一段一定不同(显然要找最长的连续相同序列),先默认将开头字母改好
var ch:ansistring;
n,k,ans,r,l,i,t:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; begin
//assign(input,'1.in'); reset(input);
//assign(output,'1.out'); rewrite(output);
readln(n,k);
readln(ch);
l:=; r:=; t:=;
for i:= to n do
begin
if ch[i]='b' then
begin
if t<k then begin inc(t); inc(r); end
else
begin
while (l<=n)and(ch[l]='a') do inc(l);
inc(l);
inc(r);
end;
end
else inc(r);
ans:=max(ans,r-l);
end;
l:=; r:=; t:=;
for i:= to n do
begin
if ch[i]='a' then
begin
if t<k then begin inc(t); inc(r); end
else
begin
while (l<=n)and(ch[l]='b') do inc(l);
inc(l);
inc(r);
end;
end
else inc(r);
ans:=max(ans,r-l);
end;
writeln(ans);
//close(input);
//close(output);
end.
【CF676C】Vasya and String(二分查找,线性扫描尺取法)的更多相关文章
- codeforces 676C C. Vasya and String(二分)
		题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ... 
- Codeforces Round #354 (Div. 2) C. Vasya and String 二分
		C. Vasya and String 题目连接: http://www.codeforces.com/contest/676/problem/C Description High school st ... 
- POJ 3061 (二分+前缀和or尺取法)
		题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ... 
- POJ 3061 Subsequence【二分答案】||【尺取法】
		<题目链接> 题目大意: 给你一段长度为n的整数序列,并且给出一个整数S,问你这段序列中区间之和大于等于S的最短区间长度是多少. 解题分析:本题可以用二分答案做,先求出前缀和,然后枚举区间 ... 
- [CF676C]Vasya and String(尺取法,原题)
		题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ... 
- java数组回顾---线性查找最大值最小值---二分查找
		import java.util.Scanner; public class ArrayDemo { public static void main(String []args) { //------ ... 
- List<T>线性查找和二分查找BinarySearch效率分析
		今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式. 线性查找:Contains,Find,IndexOf都是线性查找. 二分查找:Bin ... 
- 数组查找算法的C语言 实现-----线性查找和二分查找
		线性查找 Linear Search 用户输入学生学号的成绩 二分查找 Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵 
- 算法之二分查找PK线性查找
		列表查找(线性查找) 本质就是列表的index() 顺序查找 也叫线性查找,从列表第一个元素开始,顺序进行搜索,知道找到元素或搜索到列表最后一个元素为止. 以下是示例代码: def line_sear ... 
随机推荐
- VueJS坎坷之路222--vue cli 3.0引入静态文件
			前两天准备搭建一个vue小项目,当引入jquery脚本的时候一直找不到引入的文件: 在网上搜了好多vue添加静态文件的方法,发现大多数方法都是创建一个与文件夹src同等级的文件夹static存放引入的 ... 
- PAT 乙级 1051
			题目 题目地址:PAT 乙级 1051 思路 最近做题发现一个比较明显的现象——总是在做简单题的过程中出现这样那样的小问题,究其原因我认为还是有很多细节性的知识没有掌握,这是在以后的学习过程中需要注意 ... 
- vue之列表循环
			文档:https://cn.vuejs.org/v2/guide/list.html 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变, ... 
- MYSQL导入数据:Table XXX doesn't exist的解决
			数据表为Innodb引擎 data文件夹中存在数据表的frm文件,但在phpmyadmin中看不到这些表,于是采用导入sql文件的方式进行恢复 1.直接导入原数据表的sql文件,原frm文件不删除 出 ... 
- 【mac】【php】mac php开机重启
			homebrew.mxcl.php71.plist <?xml version="1.0" encoding="UTF-8"?> <!DO ... 
- Python基础——时间
			导入时间模块 import time 时间戳 print(time.time()) 获取本地时间 print(time.localtime(time.time())) 时间显示格式化 print(ti ... 
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
			matplotlib 中设置图形大小的语句如下: fig = plt.figure(figsize=(a, b), dpi=dpi) 其中: figsize 设置图形的大小,a 为图形的宽, b 为图 ... 
- HDU:5040-Instrusive
			Instrusive Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Proble ... 
- bash循环for/while/until
			shell流程控制之一:for循环 for VAR in LIST; do STATEMENT1 ... done 例: ... 
- Python之code对象与pyc文件(三)
			上一节:Python之code对象与pyc文件(二) 向pyc写入字符串 在了解Python如何将字符串写入到pyc文件的机制之前,我们先来了解一下结构体WFILE: marshal.c typede ... 
