codefores 1117A

2019-02-21

1117A Best Subsegment. 며칠전에 있었던 Educational Codeforces Round 60 (Rated for Div.2)의 문제다. 이 문제를 대회 당시에 봤을 때는 어떻게 평균을 빨리 구하지? 부분합써도 그게 그건데..하며 시간초과만 내고 못풀었다. 며칠지나서 지금 다시 푸니까 너무 쉬운 문제라서 당황했다… 다시는 멍청한 실수 안해야지. 이 날 레이팅이 크게 떨어져서 상심을 했지만 계속 풀다보면 이런 실수도 줄어지겠지ㅠㅠ

이 문제는 산술평균이 최대가 되는 구간의 길이를 구하는 것이다. 산술평균이 최대인 경우는 input의 배열 내에서 max값 이다. 그러므로 최소 길이는 1이고, 그 이상의 길이가 될 때는 max값이 연속으로 여러개 있는 경우이다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[] a = new int[n + 1];
        int max = 0;

        StringTokenizer st = new StringTokenizer(br.readLine());
        for(int i = 1; i <= n; i++) {
            a[i] = Integer.parseInt(st.nextToken());
            max = Math.max(max, a[i]);
        }

        int ans = 0;
        int c = 0;
        for(int i = 1; i <= n; i++) {
            if(a[i] == max) c++;
            else c = 0;
            ans = Math.max(ans, c);
        }

        System.out.println(ans);
    }
}