【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 ...
随机推荐
- 03_5_static关键字
03_5_static关键字 1. static关键字 在类中,用static声明的成员变量为静态成员变量,它为该类的公用 变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只 ...
- Linux运维笔记--第三部
第三部 3. Linux系统文件重要知识初步讲解 # ls -lhi (i: inode,每个文件前的数字代表文件身份ID:h: human 人类可读) 显示:25091 -rw-r--r-- ...
- Hexo + Github Pages搭建的个人博客
这个不算是新手的搭建流程,如果你恰巧看见这篇文章,希望你已经安装好node.git等软件,因为第一步的环境搭建准备并没有详写,默认都会了.希望能解决你的问题. 步骤: 一. 搭建环境准备 二.安装he ...
- 【转】VC自定义消息
MFC一般可利用ClassWizard类向导添加消息和消息处理函数,但用户自定义消息必须手工输入,现将vc自定义消息方法步骤记录如下: (1)定义消息 利用#define语句直接定义用户自己的消息(既 ...
- 洛谷 P1516 青蛙的约会
https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...
- Voyager的安装及配置文件
使用代理服务器安装laravel http_proxy=http://localhost:1080 composer create-project --prefer-dist laravel/lara ...
- German Collegiate Programming Contest 2015 计蒜课
// Change of Scenery 1 #include <iostream> #include <cstdio> #include <algorithm> ...
- JQuery速记
速记笔记的作用是将一些零碎的点整合在一起,这些点太小并不适合写一篇随笔,将这些点揉合在一起,可能有时候,互相就擦出火花,形成一篇博客. 1,可以用一个变量来表示某一个元素,这样就不用每次都输入$(&q ...
- 笔记-python-centos环境下安装配置
笔记-python-centos环境下安装配置 1. 准备工作 环境准备 centos6.5 mini,已有python 2.6.6 下载源码包 Python官网下载Gzipped sour ...
- 2015四川省赛 D Vertex Cover 搜索
题意: 给出一个\(n\)个点\(m\)条边的无向图,现在要给若干个点染色,使得每条边都至少邻接一个被染色的顶点.问至少要给多少各点染色才能满足条件. 分析: 注意到题目中有一个很特殊的条件: 对于图 ...