結果
| 問題 |
No.274 The Wall
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-06-13 16:55:17 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 206 ms / 2,000 ms |
| コード長 | 2,178 bytes |
| コンパイル時間 | 2,866 ms |
| コンパイル使用メモリ | 88,988 KB |
| 実行使用メモリ | 58,288 KB |
| 最終ジャッジ日時 | 2025-03-17 18:51:11 |
| 合計ジャッジ時間 | 8,367 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 23 |
ソースコード
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
private static final String YES = "YES";
private static final String NO = "NO";
private static int n;
private static int m;
private static int[] blocksCount;
private static List<int[]> blocks;
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
n = Integer.parseInt(cin.next());
m = Integer.parseInt(cin.next());
blocksCount = new int[(m + 1) / 2];
blocks = new ArrayList<int[]>(n);
for (int i = 0; i < n; i++) {
int[] block = new int[2];
int begin = Integer.parseInt(cin.next());
int end = Integer.parseInt(cin.next());
block[0] = end - begin + 1;
/* 180度回転したほうが開始位置が左にくるようであればその向きにしてからリストに詰める */
block[1] = Math.min(begin, m - end - 1);
blocks.add(block);
}
cin.close();
/* リストをソートする。1.ブロック数の多いもの 2. */
Collections.sort(blocks, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return o2[0] == o1[0] ? o1[1] - o2[1] : o2[0] - o1[0];
}
});
execute2();
}
private static void execute2() {
for (int[] block : blocks) {
for (int i = 0; i < block[0]; i++) {
int index = block[1] + i;
if (index >= m / 2) {
index = m - index - 1;
}
if (blocksCount[index] == 2) {
System.out.println(NO);
System.exit(0);
} else if (index == m / 2 && blocksCount[index] == 1) {
System.out.println(NO);
System.exit(0);
}
blocksCount[index]++;
}
}
System.out.println(YES);
}
}