SRM440 div2

Tags:
  2009/05/12 21:54

久しぶりのTopcoder
あんまり緊張せずにできた。

problem 250

ただの数学の問題。式変形して重力加速度を求めましょう!という問題でした。
Math. cbrtとMath.sqrtを間違えて無駄な時間を食う。
なんかJavaに振り回されている気がする。

problem 500

定番の迷路問題をちょっとだけひねった問題。
最短経路の問題ではなく、分岐の数がいくつあるか求めよという問題。
でも、解法は再帰で1発。
だが、あとちょっとでsubmitできなかった。
250問題でバカなことしてなければ間に合ったと悔やむ。
終わってから通したらあっさり通りました。
あーあーあーあー

public class MazeWanderingEasy {
	boolean atta = false;
	int count = 0;

    public int decisions(final String[] maze) {
    	int startx = 0, starty = 0;
    	String[][] m = new String[maze[0].length()][maze.length];
    	for (int i = 0; i < maze[0].length(); i++) {
    		for (int j = 0; j < maze.length; j++) {
    			m[i][j] = maze[j].substring(i, i + 1);
    			if (m[i][j].equals("M")) {
    				startx = i;
    				starty = j;
    			}
    		}
    	}
    	go(startx, starty, m, 0);
    	return this.count;
    }

    public int check(int x, int y, String[][] m) {
    	int check = 0;

    	if (x - 1 >= 0 && (m[x - 1][y].equals(".") || m[x - 1][y].equals("*"))) check++;
    	if (y - 1 >= 0 && (m[x][y - 1].equals(".") || m[x][y - 1].equals("*"))) check++;
    	if (x + 1 < m.length && (m[x + 1][y].equals(".") || m[x + 1][y].equals("*"))) check++;
    	if (y + 1 < m[0].length && (m[x][y + 1].equals(".") || m[x][y + 1].equals("*"))) check++;

    	return check;
    }

    public void go(int x, int y, String[][] m, int d){
    	wrap : if (!atta) {
	    	if (m[x][y].equals("*")) {
	    		atta = true;
	    		this.count = d;
	    		break wrap;
	    	}
	    	m[x][y] = "_";
	    	if (check(x, y, m) > 1) d++;
	    	System.out.println(d);

	    	if (x - 1 >= 0 && (m[x - 1][y].equals(".") || m[x - 1][y].equals("*"))) go(x - 1, y, m, d);
	    	if (y - 1 >= 0 && (m[x][y - 1].equals(".") || m[x][y - 1].equals("*"))) go(x, y - 1, m, d);
	    	if (x + 1 < m.length && (m[x + 1][y].equals(".") || m[x + 1][y].equals("*"))) go(x + 1, y, m, d);
	    	if (y + 1 < m[0].length && (m[x][y + 1].equals(".") || m[x][y + 1].equals("*"))) go(x, y + 1, m, d);
    	}
    }
}

イチイチ2次元配列作ったり、同じソースがあったりする点が無駄だったと反省しています。
でもなー、せめて配列は組み直さないとバグでそうなんだよなぁー、俺の頭だと。

problem 1000

開けるわけがない~

経験不足が露呈。もったいないなぁー
次はもうちょっと頑張ります。
せめて緑ネームになりたいのです。