CodeForces 2033D

: ) YOUNG·약 23시간 전

알고리즘

목록 보기
490/490

https://codeforces.com/problemset/problem/2033/D

풀이

12, 4, -4에서 12는 사실 의미가 없는 숫자??이긴 하지만, 결국 set을 통한 누적합에서 겹치는 값이 나오면? 0이 있는거

근데 set에 12가 들어가있고 4랑 -4의 합이 0 이니까 누적합이 되면서 다시 12가 나오고, 처음에 set에 이미 12가 들어가 있었기 때문에 이 구간에서 합이 0이 발생했다는걸 알 수 있음


import java.io.*;
import java.util.HashSet;
import java.util.StringTokenizer;

public class CF_2033D {

    // input
    private static BufferedReader br;

    // variables
    private static int T, N;

    public static void main(String[] args) throws IOException {
        br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        input();

        bw.write(solve());
        bw.close();
    } // End of main()

    private static String solve() throws IOException {
        StringBuilder sb = new StringBuilder();

        while (T-- > 0) {
            N = Integer.parseInt(br.readLine());
            HashSet<Long> set = new HashSet<>();
            set.add(0L);
            StringTokenizer st = new StringTokenizer(br.readLine());
            long sum = 0;
            int ans = 0;

            for (int i = 0; i < N; i++) {
                int num = Integer.parseInt(st.nextToken());
                sum += num;

                if (!set.add(sum)) {
                    set = new HashSet<>();
                    set.add(0L);
                    sum = 0;
                    ans++;
                }
            }

            sb.append(ans).append('\n');
        }


        return sb.toString();
    } // End of solve()

    private static void input() throws IOException {
        T = Integer.parseInt(br.readLine());
    } // End of input()
} // End of Main class

0개의 댓글