• An impassioned circulation of affection CodeForces


      题目大意就是给你一个长度为n个字符串,然后有q次询问,每次询问给个m和ch,问最多修改m个字符的值,可以得到的最长的连续ch字符的长度是多少?

    用的是尺取法,尺取和二分都一样都需要问题具有单调性,也就是要明白什么时候low,up移动。这里介绍一下尺取法

    1.概念:不断推进区间的开头和结尾,求满足条件的最小(长)区间的方法称为尺取法。所谓尺取法,顾名思义,就是像一把尺子(固定某一条件),不断向右(左)移动,不断更新所求答案。一般用来求满足条件的最小区间。

    2.实现步骤:

    1. 初始化左右端点
    2. 不断扩大右端点,直至满足条件
    3. 如果直至终点也无法满足条件,则终止,否则更新结果
    4. 扩大左端点(右移1),跳回步骤2

    在这题这个尺子也就是条件就是修改字符的个数<=m,1.一但不满足条件了就扩大左端点直至满足条件,2.要是满足条件的话就扩大右端点,然后更新res。尺取的终点就是右端点到了字符串尾。

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        char s[1505];
        int n,q,res;
        cin>>n>>s+1>>q;
        while(q--)
        {
            int m,len,res,low=1;
            char ch;
            len=0;
            res=-1;
            cin>>m>>ch;
            for(int up=1;up<=n;up++)
            {
                if(s[up]!=ch) len++;
                while(len>m)
                {
                    if(s[low]!=ch) len--;
                    low++;
                }
                res=max(res,up-low+1);//左端点往扩大后,肯定不会是答案,但是此时更新res也没问题,答案产生于右端点右移的时候
            }
            cout<<res<<endl;
        }
        return 0;
    }
    
  • 相关阅读:
    PHP快速排序算法
    PHP选择排序算法
    php几个常用的概率算法(抽奖、广告首选)
    免费Git客户端:sourcetree详细介绍
    apidoc @apiGroup兼容中文
    PHP中的精确计算bcadd,bcsub,bcmul,bcdiv 及 扩展安装
    mysql-表分区
    mysql表优化
    MySQL执行计划extra中的using index 和 using where using index 的区别
    mysql-锁
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754966.html
Copyright © 2020-2023  润新知