zoukankan      html  css  js  c++  java
  • zzuliOJ 1895: 985的0-1串难题 【二分】

    1895: 985的0-1串难题

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 188  Solved: 48

    Description

    985有一个长度为n的0-1串,已知他最多可以修改k次(每次修改一个字符即0->1 或者 1->0),他想知道连续的全1子串最长是多少。

    Input

    第一行输入一个整数t,代表有t组测试数据。
    每组数据第一行输入两个整数n,k分别代笔上面的信息。
    注:1 <= t <= 12,1 <= n <= 100000,0 <= k <= 100000。

    Output

    一个整数代表可以得到的最大长度。

    Sample Input

    26 30101006 2010100

    Sample Output

    54

    HINT

     

    Source

    hpu

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define MAXN 100005
    using namespace std;
    char s[MAXN];
    int n, k, sum[MAXN];
    void init() {
        memset(sum, 0, sizeof(sum));
        if (s[0] == '0') sum[0] = 1;
        for (int i = 1; i < n; i++) {
            if (s[i] == '0') sum[i]++;
            sum[i] += sum[i-1];
        }
    }
    bool judge(int x){
        int cnt = 0;
        if (sum[x-1] <= k) return true;
        for (int i = 0; i + x < n; i++) {
            if (sum[i + x] - sum[i] <= k) return true;
        }
        return false;
    }
    int main() {
        int t; scanf("%d", &t);
        while (t--) {
            scanf("%d%d%s", &n, &k, s);
            init();
            int lb = 0, ub = n, ans;
            while (ub >= lb) {
                int mid = (lb + ub)>>1;
                if (judge(mid)) {
                    ans = mid; lb = mid + 1;
                }
                else ub = mid - 1;
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    
    
    
  • 相关阅读:
    c# IOSerialize 验证码、图片缩放
    SqlServer 分库分表
    权限系统数据库设计
    SqlServer 读写分离
    树转二叉树
    数据结构:图的存储结构之邻接矩阵、邻接表
    【数据结构】数据结构-图的基本概念
    哈夫曼树
    二叉树遍历方法
    Oracle 检查约束check
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770852.html
Copyright © 2011-2022 走看看