zoukankan      html  css  js  c++  java
  • CF #edu 11 C. Hard Process

    题目链接:http://codeforces.com/problemset/problem/660/C

    大意是给一个01数组,至多可以将k个0变为1,问最后数组中最长能有多少个连续的1,并输出。

    问题转化一下就是找一个区间,使得区间中0的个数不多于k,且区间长度尽可能地长。尺取法做一下就可以了。

    import java.io.OutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.util.StringTokenizer;
    import java.io.IOException;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.InputStream;
    
    public class Main {
        public static void main(String[] args) {
            InputStream inputStream = System.in;
            OutputStream outputStream = System.out;
            InputReader in = new InputReader(inputStream);
            PrintWriter out = new PrintWriter(outputStream);
            Task solver = new Task();
            solver.solve(1, in, out);
            out.close();
        }
    
        static class Task {
            public void solve(int testNumber, InputReader in, PrintWriter out) {
                int n = in.nextInt(), k = in.nextInt();
                int[] a = new int[n];
                int l = 0;
                int cnt = 0;
                int ret = 0;
                int L = -1, R = -1;
                for (int r = 0; r < n; r++) {
                    a[r] = in.nextInt();
                    cnt += 1 - a[r];
                    while (cnt > k) {
                        cnt -= 1 - a[l++];
                    }
                    if (r - l + 1 >= ret) {
                        ret = r - l + 1;
                        L = l;
                        R = r;
                    }
                }
                out.println(ret);
                for (int i = 0; i < n; i++) {
                    if (L <= i && i <= R) {
                        out.print(1);
                    } else {
                        out.print(a[i]);
                    }
                    out.print(" ");
                }
            }
    
        }
    
        static class InputReader {
            private BufferedReader reader;
            private StringTokenizer tokenizer;
    
            public InputReader(InputStream stream) {
                reader = new BufferedReader(new InputStreamReader(stream));
                tokenizer = null;
            }
    
            public String next() {
                while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                    try {
                        tokenizer = new StringTokenizer(reader.readLine());
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
                return tokenizer.nextToken();
            }
    
            public int nextInt() {
                return Integer.parseInt(next());
            }
    
        }
    }
  • 相关阅读:
    服务器 防Dos攻击
    多浏览器 div 半透明
    网站工具收集
    广告平台
    ie6 position:fixed
    数据图 饼图 曲线图
    36个css框架
    css3 特效
    日ip 日pv
    网站 需求分析 收集
  • 原文地址:https://www.cnblogs.com/micrari/p/5573070.html
Copyright © 2011-2022 走看看