zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    一点关于this的理解
    BFC引发的关于position的思考
    JS HTML标签尺寸距离位置定位计算
    JS获取网页宽高方法集合
    JSDOM之节点
    并发- synchronized,锁
    公共文件下载-结构设计
    订单模块-结构设计
    ES-update
    ES使用笔记
  • 原文地址:https://www.cnblogs.com/eason9906/p/11754965.html
Copyright © 2011-2022 走看看