結果

問題 No.323 yuki国
ユーザー ki_ki33
提出日時 2015-12-16 17:15:54
言語 Java
(openjdk 23)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 3,228 bytes
コンパイル時間 2,499 ms
コンパイル使用メモリ 89,884 KB
実行使用メモリ 58,572 KB
最終ジャッジ日時 2024-09-16 05:43:15
合計ジャッジ時間 10,107 ms
ジャッジサーバーID
(参考情報)
judge4 / judge6
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 6
other AC * 2 TLE * 1 -- * 29
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

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;
boolean isUp = false;
boolean isDown = false;
if (isIn(nx, ny)) {
char nc = map[nx][ny];
if (nc == map[x][y]) {
if (nc == '.' ) {
isDown = true;
}else {
isUp = true;
}
}
}
nx = x-1;ny = y;
if (isIn(nx, ny)) {
char nc = map[nx][ny];
if (nc == map[x][y]) {
if (nc == '.' ) {
isDown = true;
}else {
isUp = true;
}
}
}
nx = x;ny = y+1;
if (isIn(nx, ny)) {
char nc = map[nx][ny];
if (nc == map[x][y]) {
if (nc == '.' ) {
isDown = true;
}else {
isUp = true;
}
}
}
nx = x;ny = y-1;
if (isIn(nx, ny)) {
char nc = map[nx][ny];
if (nc == map[x][y]) {
if (nc == '.' ) {
isDown = true;
}else {
isUp = true;
}
}
}
if (isDown) {
int max = 0;
for (int i=1499;i >= 0; i--) {
if (memo[x][y][i] ){
max = i;
break;
}
}
for (int i=max;i >= 0; i-=2) {
memo[x][y][i]= true;
}
}
if (isUp ) {
int max = 1500;
for (int i=0;i < 1500; i++) {
if (memo[x][y][i] ){
max = i;
break;
}
}
for (int i=max;i < 1500; i+=2) {
memo[x][y][i]= true;
}
}
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;
boolean flag = false;
for (int i=1; i < 1500; i++) {
if (memo[x][y][i]) {
if (!memo[nx][ny][i+add]) {
memo[nx][ny][i+add] = true;
flag = true;
}
}
}
if (flag) {
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();
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0