akizoraのアウトプットブログ

駆け出しエンジニアの拙いアウトプット

AtCoder Beginner Contest 115

最近、競プロ(Atcoder)を始めた。 まだまだ初心者だけど、考察とかを書いて行こうと思う。 ABCは2回目。

今日のABC。 開始が10分ほど延期になった。その間にトイレ行ってた。

A問題

if文書いて終わり。それでも2分くらい。

B問題

ソートして一番金額が高いものを半額にすればできた。 始まってから10分くらい。遅い。

C問題

前回はC問題解けなかったから気合いを入れる。 なんかできそう、と考えていると、ソートしてK個分みてMAXとMINの差分が小さくなるものを選べばできることを思いつく。 書いてみるとできた。 (だけどミスってWAを出してしまった。K個分みることを忘れていた。。)

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int K = sc.nextInt();

        ArrayList<Long> list = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            list.add(sc.nextLong());
        }

        Collections.sort(list);

        long[] dif = new long[N-K+1];

        for (int i = 0; i < N-K+1; i++) {
            long min = list.get(i);
            long max = list.get(i+K-1);

            dif[i] = max - min;
        }
        Arrays.sort(dif);
        System.out.println(dif[0]);
    }
}

D問題

解けなかった。ペンだけ動かして漸化式書いてた・・ もっと勉強が必要ですね。