• 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());
            }
    
        }
    }
  • 相关阅读:
    SQL复制表
    文件流 修改二进制文件
    C#代码开启或关闭window service
    程序员之间的相处
    .NET实现图片下载(后台)
    当要存入数据的数据为null时 必须转换成DBNull.Value
    Maven第三篇【Maven术语、pom.xml介绍】
    Maven第二篇【Idea下使用Maven】
    Maven第一篇【介绍、安装、结构目录】
    SSM整合开发
  • 原文地址:https://www.cnblogs.com/micrari/p/5573070.html
Copyright © 2020-2023  润新知