zoukankan      html  css  js  c++  java
  • codeforces 814C(二分)

    题目链接:http://codeforces.com/contest/814/problem/C

    题意:给出一个字符串和一个字符,最多可以改k次,问全为该字符的子序列最长为多少。

    思路:sum[char][i]表示字符串前i项中有多少个字符不为该字符,枚举l,二分求r,复杂度O(26*n2*logn)

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    char a[1505];
    int sum[30][1505],ans[30][1505];
    int main()
    {
        int n,q,x;
        char c;
        scanf("%d",&n);
        scanf("%s",a+1);
        scanf("%d",&q);
        for(int i = 1; i <= 26; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                if(char(i + 96) != a[j])
                    sum[i][j] = sum[i][j-1] + 1;
                else
                    sum[i][j] = sum[i][j-1];
            }
        }
        for(int i = 1; i <= 26; i++)
        {
            for(int j = 1; j <= n; j++)
            {
                for(int l = 1; l <= n; l++)
                {
                    int r = upper_bound(sum[i] + l, sum[i] + n + 1, sum[i][l-1] + j) - sum[i] - 1;
                    ans[i][j] = max(ans[i][j], r - l + 1);
                }
            }
        }
        while(q--)
        {
            scanf("%d %c",&x,&c);
            printf("%d
    ",ans[(int)(c - 96)][x]);
        }
        return 0;
    }
    

      

  • 相关阅读:
    7-11
    7-9
    7-8
    7-7
    7-6
    7-5
    7-4
    7-3
    第08次:升级《陋习手记》完善主从UI
    第07次:升级《陋习手记》显示多条数据
  • 原文地址:https://www.cnblogs.com/westwind1005/p/7019033.html
Copyright © 2011-2022 走看看