AtCoder Regular Contest 152

コンテスト前のレート:2000
レート通りのパフォーマンスが得られる順位:343位(1000点、75分49秒)

A - Seat Occupation

問題

思考過程
  1. 2人組をなるべく座れなくすることを考えると、端から順に1つずつ空席を作りながら座っていけばよい。
  2. 今最後に埋まっている席がx番目とすると、2人組が来た時にx+2 \gt Lの場合"No"となる。
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sa = br.readLine().split(" ");
        int n = Integer.parseInt(sa[0]);
        int l = Integer.parseInt(sa[1]);
        sa = br.readLine().split(" ");
        int[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(sa[i]);
        }
        br.close();

        int x = 0;
        for (int i = 0; i < n; i++) {
            if (a[i] == 2 && x + a[i] > l) {
                System.out.println("No");
                return;
            }
            x += a[i] + 1;
        }
        System.out.println("Yes");
    }
}

ここまで3分31秒+0ペナ。39位。


B - Pass on Path

問題

思考過程
  1. それが最適である根拠は薄かったが、とりあえずすれ違いが1回で済むのは同じ休憩所から逆向きにスタートしたとき。
  2. その場合にすれ違うのは、始点と対称な位置付近。
  3. 始点を全探索して、対称な位置から最も近い休憩所までの距離の最小を求める。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sa = br.readLine().split(" ");
        int n = Integer.parseInt(sa[0]);
        long l = Integer.parseInt(sa[1]);
        sa = br.readLine().split(" ");
        TreeSet<Long> set = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            long a = Integer.parseInt(sa[i]);
            set.add(a);
        }
        br.close();

        long min = Long.MAX_VALUE;
        for (long k : set) {
            long x = l - k;
            Long x1 = set.floor(x);
            Long x2 = set.ceiling(x);
            if (x1 != null) {
                min = Math.min(min, x - x1);
            }
            if (x2 != null) {
                min = Math.min(min, x2 - x);
            }
        }
        System.out.println(l * 2 + min * 2);
    }
}

ここまで15分16秒+0ペナ。18位。



残り時間はCとDを行ったり来たり。
Cは一応提出まではしたが6割ACといったところ。
Dは深く掘り下げられなかったが近い発想はできていたかもくらい。



終結果:ABの2完900点、15分16秒、379位、パフォーマンス1951
レート変動:2000→1996(-4)


100分以上椅子を温める結果に・・・。900点内3位だった。
ここのところのARCはA問題から詰まってばかりだったので、序盤が早かったことだけは良かった。
AHCでグラフを構築していた効果でDができれば言うことなかったのだが。