taiPyのお悩み解決ブログ

日々の発見をまとめます!

Javaの解答例:C - Σ , ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)

はじめに

自分用の備忘録です。

問題文

下記のリンクを参考にしてください。1からNまで全部足そう!でも、このリストの中にある数は足さないでね!っていう問題です。

atcoder.jp

解答例

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        TreeSet<Integer> st = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            int a = scanner.nextInt();
            if (a <= k) st.add(a);
        }
        long ans = (long) k * (k + 1) / 2;
        for (int i: st) ans -= i;
        System.out.println(ans);
    }
}

その2

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int K = sc.nextInt();

        Set<Integer> set = new HashSet<>();
        

        for (int i = 0; i < N; i++) {
            int a = sc.nextInt();
            if (a <= K) {
                set.add(a);
            }
        }

        long ans = (long) K * (K + 1) / 2;
        for (Integer integer : set) {
            ans -= integer;
        }
        System.out.println(ans);
        
    }

}

メモ

なんか、JDKとかVScodeがうまく動いていなさそうだなって思ったら一回、アプリを消そう。なんかなおる。

{ (初めの数) + (終わりの数) }× (個数) ÷2

これで、ある数からある数までの連続している合計値が分かる。面積でこの問題を考えると分かりやすい。高さが1からNまでの階段ができて、それをひっくり返したやつを足しちゃう。それを2分の1しちゃったらなんか、何とかなっちゃった的な。(説明雑だな。笑)

hiraocafe.com

参考文献

atcoder.jp

atcoder.jp