| ||||||||||
| 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 | |||||||||
这题坑不少1.时间重叠 比如0 0 1和0 1 0则0 0被毁是在0时刻
2.最坑的是他可以逃到302,数据范围是300没错,但那只是流行着陆范围
网上javaAC代码没有,这里附上,祝大家AC愉快
import java.util.*;
public class Main {
public static class set
{
int x,y,t;
set(int x,int y,int time)
{
this.x=x;this.y=y;t=time;
}
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int[][] dest=new int[303][303];
for(int i=0;i<=302;i++)
for(int j=0;j<=302;j++)
dest[i][j]=10000;
boolean[][] map=new boolean[303][303];
int[] vx={0,0,1,-1},vy={1,-1,0,0};
for(int i=0;i<m;i++)
{
int x=in.nextInt(),y=in.nextInt(),t=in.nextInt();
if(dest[x][y]>t) dest[x][y]=t;
for(int j=0;j<4;j++)
{
int a=x+vx[j],b=y+vy[j];
if(0<=a&&a<=301&&0<=b&&b<=301&&dest[a][b]>t)
dest[a][b]=t;
}
}
Queue<set> q=new LinkedList<set>();
q.add(new set(0,0,0));map[0][0]=true;int time=-1;
while(!q.isEmpty())
{
set loc=q.poll();
if(dest[loc.x][loc.y]!=10000&&loc.t<dest[loc.x][loc.y])
{
for(int i=0;i<4;i++)
{
int a=loc.x+vx[i],b=loc.y+vy[i];
if(0<=a&&a<=302&&0<=b&&b<=302&&!map[a][b])
{ q.add(new set(a,b,loc.t+1));map[a][b]=true; }
}
}
else if(dest[loc.x][loc.y]==10000) { time=loc.t;break; }
}
System.out.println(time);
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator