AtCoder Regular Contest 152
コンテスト前のレート:2000
レート通りのパフォーマンスが得られる順位:343位(1000点、75分49秒)
A - Seat Occupation
思考過程
- 人組をなるべく座れなくすることを考えると、端から順につずつ空席を作りながら座っていけばよい。
- 今最後に埋まっている席が番目とすると、人組が来た時にの場合"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
思考過程
- それが最適である根拠は薄かったが、とりあえずすれ違いが回で済むのは同じ休憩所から逆向きにスタートしたとき。
- その場合にすれ違うのは、始点と対称な位置付近。
- 始点を全探索して、対称な位置から最も近い休憩所までの距離の最小を求める。
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ができれば言うことなかったのだが。