Problem 2030 The Secret Number

ソースコード(Java)


import java.util.*;
public class Main {

static Scanner in = new Scanner(System.in);

static Character[][] nums;
static int w,h;

public static void main(String[] args) {
	while(true){
		w = in.nextInt();
		h = in.nextInt();
		if(w == 0){
			break;
		}
		nums = new Character[w][h];
		cache = new HashMap<Integer,java.math.BigInteger>();
		for(int i=0;i<h;i++){
			String line = in.next();
			for(int j=0;j<w;j++){
				nums[j][i] = line.charAt(j);
			}
		}
		
		java.math.BigInteger val = java.math.BigInteger.ZERO;
		for(int i=0;i<h;i++){
			for(int j=0;j<w;j++){
				if(Character.isDigit(nums[j][i])){
					val = val.max(_rec(j,i));
				}
			}
		}
		System.out.println(val);
	}
}

static HashMap<Integer,java.math.BigInteger> cache;

static java.math.BigInteger _rec(int x,int y){
	if(x < 0 || y < 0 || !Character.isDigit(nums[x][y])){
		return java.math.BigInteger.ZERO;
	}
	else if (cache.containsKey(y*w + x)){
		return cache.get(y*w + x);
	}
	else {
		cache.put(y*w + x
				,new java.math.BigInteger(_rec(x-1,y).max(_rec(x,y-1)).toString().concat(nums[x][y].toString())));
		return  cache.get(y*w + x);
	}
}


}
最終更新:2007年06月18日 15:36