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;
    }
    

      

  • 相关阅读:
    绘制八卦阵
    绘制奥运五环
    绘制渐变的圆
    实验报告
    大学排名
    第一条爬虫
    自己的第一个网页
    科学计算与可视化
    类和正则表达(自动更正 代数运算)
    预测比赛
  • 原文地址:https://www.cnblogs.com/westwind1005/p/7019033.html
Copyright © 2011-2022 走看看