結果
| 問題 |
No.340 雪の足跡
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-01-30 04:16:10 |
| 言語 | Java (openjdk 23) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,431 bytes |
| コンパイル時間 | 2,948 ms |
| コンパイル使用メモリ | 87,952 KB |
| 実行使用メモリ | 118,112 KB |
| 最終ジャッジ日時 | 2024-09-21 19:00:12 |
| 合計ジャッジ時間 | 8,996 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 9 TLE * 1 -- * 22 |
ソースコード
// とりあえず、01_small_00.txt を通す。
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String... args) throws Exception {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int h = sc.nextInt();
int n = sc.nextInt();
Map<Integer, Set<Integer>> map = new HashMap<>();
while (sc.hasNextInt()) {
int m = sc.nextInt();
int b = sc.nextInt();
for (int i = 0; i < m; i++) {
int bTo = sc.nextInt();
int offset;
if (bTo >= b + w) {
offset = w;
} else if (bTo > b) {
offset = 1;
} else if (bTo <= b - w) {
offset = -w;
} else {
offset = -1;
}
while (b != bTo) {
map.computeIfAbsent(b, x -> new HashSet());
map.get(b).add(b + offset);
map.computeIfAbsent(b + offset, x -> new HashSet());
map.get(b + offset).add(b);
b += offset;
}
}
}
Queue<Point> queue = new LinkedList<>();
queue.add(new Point(0, 0));
Set<Integer> visited = new HashSet<>();
visited.add(0);
Point point;
while ((point = queue.poll()) != null) {
if (point.index == w * h - 1) {
System.out.println(point.move);
System.exit(0);
}
Set<Integer> indexesTo = map.get(point.index);
if (indexesTo != null) {
for (Integer indexTo : indexesTo) {
if (!visited.contains(indexTo)) {
visited.add(indexTo);
queue.add(new Point(indexTo, point.move + 1));
}
}
}
}
System.out.println("Odekakedekinai..");
}
}
class Point {
final int index;
final int move;
Point(int index, int move) {
this.index = index;
this.move = move;
}
@Override
public String toString() {
return String.format("index: %d, move: %d", index, move);
}
}