AtCoder Grand Contest 008

Submission #1042657

Source codeソースコード

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
public class Main {
	static final long C =  1000000007;
	static final int CY = 1000000000;
	static final int INF = Integer.MAX_VALUE/2;
	StringBuilder sb;
	//セット
	class Set<F,S> {
		F f;
		S s;
		Set(F f, S s) {this.f = f;this.s = s;}
	}
	char[][] c;
	int H;
	int W;
	public void calc() {
		sb = new StringBuilder();



		IO sc = new IO();
		int n = sc.nextInt();
		int k = sc.nextInt();
		int[] a = sc.nextIntArray(n);

		long ans = 0;

		long sum = 0;

		for (int i=k; i < n; i++) {
			sum += Math.max(a[i],0);
		}
		long ksum = 0;
		for (int i=0; i < k; i++) {
			ksum += a[i];
		}
		for (int i=0; i < n-k+1; i++) {
			ans = Math.max(ans, Math.max(ksum+sum, sum));
			//System.out.println(ksum+":" + sum);
			ksum -= a[i];
			if (i==n-k) break;
			sum += Math.max(a[i],0);
			ksum += a[i+k];
			sum -= Math.max(a[i+k],0);
		}





		System.out.println(ans);

	}

	public static void main(String[] args) {
		Main main = new Main();
		main.calc();

	}
}
class IO extends PrintWriter {
	private final InputStream in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	public IO() { this(System.in);}
	public IO(InputStream source) { super(System.out); this.in = source;}
	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		}else{
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}
	private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
	private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
	private static boolean isNewLine(int c) { return c == '\n' || c == '\r';}
	public boolean hasNext() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; return hasNextByte();}
	public boolean hasNextLine() { while(hasNextByte() && isNewLine(buffer[ptr])) ptr++; return hasNextByte();}
	public String next() {
		if (!hasNext()) {
			throw new NoSuchElementException();
		}
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while(isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}
	public char[] nextCharArray(int len) {
		if (!hasNext()) {
			throw new NoSuchElementException();
		}
		char[] s = new char[len];
		int i = 0;
		int b = readByte();
		while(isPrintableChar(b)) {
			if (i == len) {
				throw new InputMismatchException();
			}
			s[i++] = (char) b;
			b = readByte();
		}
		return s;
	}
	public String nextLine() {
		if (!hasNextLine()) {
			throw new NoSuchElementException();
		}
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while(!isNewLine(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}
	public long nextLong() {
		if (!hasNext()) {
			throw new NoSuchElementException();
		}
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while(true){
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			}else if(b == -1 || !isPrintableChar(b)){
				return minus ? -n : n;
			}else{
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
	public int nextInt() {
		long nl = nextLong();
		if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) {
			throw new NumberFormatException();
		}
		return (int) nl;
	}
	public char nextChar() {
		if (!hasNext()) {
			throw new NoSuchElementException();
		}
		return (char) readByte();
	}
	public double nextDouble() { return Double.parseDouble(next());}
	public int[] nextIntArray(int n) { int[] a = new int[n]; for(int i=0;i<n;i++) a[i] = nextInt(); return a;}
	public long[] nextLongArray(int n) { long[] a = new long[n]; for(int i=0;i<n;i++) a[i] = nextLong(); return a;}
	public double[] nextDoubleArray(int n) { double[] a = new double[n]; for(int i=0;i<n;i++) a[i] = nextDouble(); return a;}
	public void nextIntArrays(int[]... a) { for(int i=0;i<a[0].length;i++) for(int j=0;j<a.length;j++) a[j][i] = nextInt();}
	public int[][] nextIntMatrix(int n,int m) { int[][] a = new int[n][]; for(int i=0;i<n;i++) a[i] = nextIntArray(m); return a;}
	public char[][] nextCharMap(int n,int m) { char[][] a = new char[n][]; for(int i=0;i<n;i++) a[i] = nextCharArray(m); return a;}
	public void close() { super.close(); try {in.close();} catch (IOException e) {}}
}

Submission

Task問題 B - Contiguous Repainting
User nameユーザ名 キーキ
Created time投稿日時
Language言語 Java8 (OpenJDK 1.8.0)
Status状態 AC
Score得点 400
Source lengthソースコード長 4794 Byte
File nameファイル名
Exec time実行時間 150 ms
Memory usageメモリ使用量 10600 KB

Test case

Set

Set name Score得点 / Max score Cases
Sample - 0_00.txt,0_01.txt,0_02.txt,0_03.txt
All 400 / 400 0_00.txt,0_01.txt,0_02.txt,0_03.txt,1_00.txt,1_01.txt,1_02.txt,1_03.txt,1_04.txt,1_05.txt,1_06.txt,1_07.txt,1_08.txt,1_09.txt,1_10.txt,1_11.txt,1_12.txt,1_13.txt,1_14.txt,1_15.txt,1_16.txt,1_17.txt,1_18.txt,1_19.txt,1_20.txt,1_21.txt

Test case

Case name Status状態 Exec time実行時間 Memory usageメモリ使用量
0_00.txt AC 97 ms 8016 KB
0_01.txt AC 98 ms 8016 KB
0_02.txt AC 98 ms 8144 KB
0_03.txt AC 99 ms 8148 KB
1_00.txt AC 100 ms 8148 KB
1_01.txt AC 98 ms 8148 KB
1_02.txt AC 98 ms 8144 KB
1_03.txt AC 133 ms 9528 KB
1_04.txt AC 146 ms 9856 KB
1_05.txt AC 150 ms 10572 KB
1_06.txt AC 148 ms 10492 KB
1_07.txt AC 149 ms 10556 KB
1_08.txt AC 142 ms 10424 KB
1_09.txt AC 133 ms 10372 KB
1_10.txt AC 144 ms 10600 KB
1_11.txt AC 146 ms 10344 KB
1_12.txt AC 147 ms 10304 KB
1_13.txt AC 145 ms 10364 KB
1_14.txt AC 144 ms 10376 KB
1_15.txt AC 149 ms 10476 KB
1_16.txt AC 144 ms 10424 KB
1_17.txt AC 146 ms 10360 KB
1_18.txt AC 135 ms 10348 KB
1_19.txt AC 144 ms 10104 KB
1_20.txt AC 145 ms 10224 KB
1_21.txt AC 143 ms 10364 KB