题意:

给出一个长度为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(二分查找,线性扫描尺取法)的更多相关文章

  1. codeforces 676C C. Vasya and String(二分)

    题目链接: C. Vasya and String time limit per test 1 second memory limit per test 256 megabytes input sta ...

  2. 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 ...

  3. POJ 3061 (二分+前缀和or尺取法)

    题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点 ...

  4. POJ 3061 Subsequence【二分答案】||【尺取法】

    <题目链接> 题目大意: 给你一段长度为n的整数序列,并且给出一个整数S,问你这段序列中区间之和大于等于S的最短区间长度是多少. 解题分析:本题可以用二分答案做,先求出前缀和,然后枚举区间 ...

  5. [CF676C]Vasya and String(尺取法,原题)

    题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...

  6. java数组回顾---线性查找最大值最小值---二分查找

    import java.util.Scanner; public class ArrayDemo { public static void main(String []args) { //------ ...

  7. List<T>线性查找和二分查找BinarySearch效率分析

    今天因为要用到List的查找功能,所以写了一段测试代码,测试线性查找和二分查找的性能差距,以决定选择哪种查找方式. 线性查找:Contains,Find,IndexOf都是线性查找. 二分查找:Bin ...

  8. 数组查找算法的C语言 实现-----线性查找和二分查找

    线性查找  Linear Search 用户输入学生学号的成绩 二分查找  Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵

  9. 算法之二分查找PK线性查找

    列表查找(线性查找) 本质就是列表的index() 顺序查找 也叫线性查找,从列表第一个元素开始,顺序进行搜索,知道找到元素或搜索到列表最后一个元素为止. 以下是示例代码: def line_sear ...

随机推荐

  1. javaweb基础(10)_HttpServletRequest原理介绍

    一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...

  2. javaweb基础(2)_tomcat服务器配置

    一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...

  3. 03_5_static关键字

    03_5_static关键字 1. static关键字 在类中,用static声明的成员变量为静态成员变量,它为该类的公用 变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只 ...

  4. VS快捷键总结(开发中经常遇到)

    1.窗口快捷键  (大家有没有发现但凡跟窗口挂上钩的快捷键当中都有一个W,那是因为W代表Windows也就是窗口的意思) Ctrl+W,W: 浏览器窗口 (浏览橱窗用有道的翻译是window shop ...

  5. STL之stack操作

    c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...

  6. Latex使用笔记,中文,字号等

    中文 编译器选择的xelatex 或者lualatex 我试过的两种方式(都是基于ctex的). 直接使用ctex的基本documentclass \documentclass[UTF8]{ctexa ...

  7. 【NOIP2017提高A组冲刺11.8】好文章

    #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> us ...

  8. JS节点操作(JS原生+JQuery)

    JavaScript与JQuery节点操作   节点关系与类型 任何HTML元素,都有nodeType属性.值有1~12,常用的有: 1.元素节点 2.文本节点 8.注释节点 9.document节点 ...

  9. cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

    参考  http://blog.csdn.net/mazicwong/article/details/54946952 1.到https://curl.haxx.se/ca/cacert.pem复制下 ...

  10. 配置wamp开发环境

    新手在PHP网站建设时,会使用使用PHP的集成开发环境,这样利于开发和理解!但是做为一个网站开发人员,会独立的配置开发环境这是必须的……因为集成的环境毕竟是固定的,不利于自己的开发.好,废话少说咱现在 ...