結果
| 問題 |
No.323 yuki国
|
| コンテスト | |
| ユーザー |
ki_ki33
|
| 提出日時 | 2015-12-16 16:43:03 |
| 言語 | Java (openjdk 23) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,593 bytes |
| コンパイル時間 | 4,590 ms |
| コンパイル使用メモリ | 82,540 KB |
| 実行使用メモリ | 53,508 KB |
| 最終ジャッジ日時 | 2024-09-16 05:41:20 |
| 合計ジャッジ時間 | 10,546 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge6 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 2 TLE * 1 -- * 29 |
ソースコード
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentSkipListSet;
import javax.swing.ImageIcon;
public class Main {
static final long C = 1000000007;
static final int CY = 1000000000;
//long[] F;
public void calc() {
long fTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
BufferedInputStream bs = new BufferedInputStream(System.in);
Scanner sc = new Scanner(bs);
int h = sc.nextInt();
int w = sc.nextInt();
int f = sc.nextInt();
Point fp = new Point(sc.nextInt(), sc.nextInt());
g = sc.nextInt();
gp = new Point(sc.nextInt(), sc.nextInt());
map = new char[h][];
for (int i=0; i < h; i++) {
map[i] = sc.next().toCharArray();
}
memo = new boolean[h][w][1501];
boolean ans = false;
memo[fp.x][fp.y][f] = true;
msd(fp.x, fp.y);
ans = memo[gp.x][gp.y][g];
System.out.println(ans?"Yes":"No");
}
//static int N = 1500;
boolean[][][] memo ;
char[][] map;
int g;
Point gp;
void msd(int x, int y) {
if (memo[gp.x][gp.y][g]) {
return;
}
int nx = x+1,ny = y;
check(x, y, nx, ny);
nx = x-1;ny = y;
check(x, y, nx, ny);
nx = x;ny = y+1;
check(x, y, nx, ny);
nx = x;ny = y-1;
check(x, y, nx, ny);
}
private void check(int x, int y, int nx, int ny) {
int add;
if (isIn(nx, ny)) {
char nc = map[nx][ny];
add = nc == '.'?-1:1;
if (nc == map[x][y]) {
boolean flag = false;
if (nc == '.' ) {
int max = 0;
for (int i=1499;i >= 0; i--) {
if (memo[x][y][i] ){
max = i;
}
}
for (int i=max-1;i >= 0; i-=2) {
if (!memo[nx][ny][i]) {
memo[nx][ny][i]= true;
flag = true;
}
}
}else {
int max = 1500;
for (int i=0;i < 1500; i++) {
if (memo[x][y][i] ){
max = i;
}
}
for (int i=max+1;i < 1500; i+=2) {
if (!memo[nx][ny][i]) {
memo[nx][ny][i]= true;
flag = true;
}
}
}
if (flag) {
msd(nx, ny);
}
}
for (int i=1; i < 1500; i++) {
if (memo[x][y][i]) {
if (!memo[nx][ny][i+add]) {
memo[nx][ny][i+add] = true;
msd(nx, ny);
}
}
}
}
}
boolean isIn(int x, int y) {
return !(x < 0 || y < 0 || map.length <= x || map[0].length <= y);
}
public static void main(String[] args) {
Main main = new Main();
main.calc();
}
}
ki_ki33