Codeforces 814C 尺取法

传送门:题目

题意:

给一个长度为n的字符串,替换其中的m个字母,然后求替换后m个字母的最大长度。

题解:

q 2105 2 ∗ 10 5 n1500,直接暴力的化会超时,这里我们采用尺取法,算是一种优化的暴力吧。尺取法的意思就是我们拿一个区间,每次只考虑这个区间内答案,然后区间逐步往右移动,每次答案都取最大值,这样我们一定能获得最优解。一说到最优解,那么dp也一定可以做,是的,以后再填坑吧。

AC代码(尺取法):

#include<iostream>
#include <string>
using namespace std;
int main() {
    int n, T;
    string str;
    cin >> n >> str >> T;

    while (T--) {
        int x, ans = 0, r = 0, l = 0;
        char c;
        cin >> x >> c;
        for (int i = 0; i < n; i++) {
            if (str[i] != c)
                r++;
            while (r > x) {
                if (str[l] != c)
                    r--;
                l++;
            }
            ans = max(ans, i - l + 1);
        }
        cout << ans << endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值