AtCoder Beginner Contest 318  (A, B, C のみ)

# 問題リンク
https://atcoder.jp/contests/abc318

# 補足
リアタイは出来なかったので後日解いてます。
~~もしかしたら AC じゃないかも。~~ 信じられないくらい間違えてます。

# A
`N - M `日間を周期 P で割り、M 日目の1回を足す。

WA (14/18)

```java
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> list = Arrays.asList(scanner.nextLine().split(" "));
        int N = Integer.valueOf(list.get(0));
        int M = Integer.valueOf(list.get(1));
        int P = Integer.valueOf(list.get(2));

        System.out.println((N - M) / P +1);
    }
}

```

# B
x, y の順番で値を格納するリストを片っ端から Set に突っ込んで、最後にその Set の要素数を出力する。

AC (24/24)

```java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        while (scanner.hasNextLine()) {
            String s = scanner.nextLine();
            if (s.length() == 0) break;
            list.add(s);
        }
        scanner.close();
        Set<List<Integer>> nest = new HashSet<>();

        for (int i = 1;i<list.size();i++) {
            List<String> l = Arrays.asList(list.get(i).split(" "));
            int xStart = Integer.valueOf(l.get(0));
            int xEnd = Integer.valueOf(l.get(1));
            int yStart = Integer.valueOf(l.get(2));
            int yEnd = Integer.valueOf(l.get(3));
            for (int j=xStart;j<xEnd;j++) {
                for (int k=yStart;k<yEnd;k++) {
                    List<Integer> element = Arrays.asList(j, k);
                    nest.add(element);
                }
            }
        }

        System.out.print(nest.size());
    }
}
```

# C
周遊チケットの一日当たりの値段よりも安いものは合計に加算する。
周遊チケットの一日当たりの値段よりも高いものをリストに入れる。
そのリストの要素数をチケットの枚数で割り、端数が出る場合はリストの先頭から端数までの要素の合計とチケット価格の安い方を合計に加算する。

WA(19/36)

```java
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        while (scanner.hasNextLine()) {
            String s = scanner.nextLine();
            if (s.length() == 0) break;
            list.add(s);
        }
        scanner.close();

        List<String> l = Arrays.asList(list.get(0).split(" "));
        int days = Integer.valueOf(l.get(0));
        int ticket_amount = Integer.valueOf(l.get(1));
        long ticket_price = Integer.valueOf(l.get(2));
        List<String> ll = Arrays.asList(list.get(1).split(" "));
        List<Double> F = new ArrayList<>();
        ll.forEach(s-> F.add(Double.valueOf(s)));
        long fTotal = 0;
        for (double i : F) {
            fTotal += i;
        }

        long all_ticket = ((days / ticket_amount) + 1) * ticket_price;
        if (all_ticket < fTotal) {
            System.out.println(all_ticket);
            return;
        }

        long result = 0;
        Collections.sort(F);
        List<Double> overs = new ArrayList<>();
        for (double i : F) {
            if (i < ((double)ticket_price /ticket_amount)) result += i;
            else overs.add(i);
        }

        if (overs.size() != 0) {
            result += ticket_price * (overs.size() / ticket_amount);
            int modulo = overs.size() % ticket_amount;
            long modulo_total = 0;
            for (double i : overs.subList(0, modulo)) {
                modulo_total += i;
            }
            result += Math.min(modulo_total, ticket_price);
        }

        System.out.println(result);
    }
}

```