Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
poj1009,给出的测试数据过了,时间也不超,但还是Wrong Answer。没想明白哪里错了,求指教import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; /** * POJ-1009-Edge Detection */ public class Main{ public static void main(String[] args){ Scanner line = new Scanner(System.in); int[][] pixIn = new int[1000][2]; //用于保存输入数据 while(true){ int width = line.nextInt(); //图像的宽度 System.out.println(width); if(width == 0){ break; } int i; int k = 0; while(true){ int valeIn = line.nextInt(); int lenIn = line.nextInt(); if(valeIn==0 && lenIn==0){ break; } else{ //保存输入数据 pixIn[k][0] = valeIn; //数值 pixIn[k][1] = lenIn; //长度 k++; } } int totalNum = 0; //pixel总数 for(i = 0; i < k; i++){ totalNum += pixIn[i][1]; } List<Integer> posit = new ArrayList(); //存储需要计算的位置 int pn = 0; for(i=0; i<k; i++){ //值发生改变的周围都需要计算 if(!posit.contains(pn)){ posit.add(pn); } if(pn%width-1>0 && pn-1-width>0 && !posit.contains(pn-1-width)){ posit.add(pn-1-width); } if(pn-width>0 && !posit.contains(pn-width)){ posit.add(pn-width); } if((pn+1)%width!=0 && pn+1-width>0 && !posit.contains(pn+1-width)){ posit.add(pn+1-width); } if(pn%width-1>0 && !posit.contains(pn-1)){ posit.add(pn-1); } if((pn+1)%width!=0 && pn+1<totalNum && !posit.contains(pn+1)){ posit.add(pn+1); } if(pn%width-1>0 && pn-1+width<totalNum && !posit.contains(pn-1+width)){ posit.add(pn-1+width); } if(pn+width<totalNum && !posit.contains(pn+width)){ posit.add(pn+width); } if(pn+1+width<totalNum && !posit.contains(pn+1+width)){ posit.add(pn+1+width); } pn += pixIn[i][1]; } Collections.sort(posit); int past = -1; int count = 0; int previ = 0; boolean flag = false; String outLine = ""; //输出 for(int index: posit){ int row = index / width; //行号(从0开始) int col = index % width; //列号(从0开始) int j, m; int cur = getValue(row, col, width, totalNum, pixIn, k); //当前位置的值 int max = 0; //新结果处的值 for(j=row-1; j<=row+1; j++){ //计算新结果处的值 for(m=col-1; m<=col+1; m++){ int pre = getValue(j, m, width, totalNum, pixIn, k); //周围数字的值(包括当前位置) if(pre != -1){ int tp = Math.abs(cur - pre); //计算新结果的数值 if(tp > max){ //取最大值 max = tp; } } } } if(max != past){ if(flag){ count = index - previ; System.out.println(outLine+count); } previ = index; outLine = max + " "; past = max; } flag = true; } count = totalNum - previ; System.out.println(outLine+count); System.out.println("0 0"); } } /** * 获取row行,col列处的值 * @param row 行号(从0开始) * @param col 列号(从0开始) * @param width 图像宽度 * @param totalNum pixel总数 * @param pixIn 输入的数据(原始数据) * @param k 输入数据的行数 * @return row行,col列处的值 */ public static int getValue(int row, int col, int width, int totalNum, int[][]pixIn, int k){ int index = row * width + col; if(row<0 || col<0 || col>width-1 || row>totalNum/width -1 || index>totalNum-1){ //越界的情况 return -1; } int sum = 0; int i; for(i = 0; i < k; i++){ //定位原始数值 if(sum > index){ break; } sum += pixIn[i][1]; } i--; return pixIn[i][0]; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator