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 |
求大大分析下为何显示WA?我觉得思路已经很明确了,测试数据也过了思路是用结构体把每个点的i,j以及高度保存下来, 然后sort, 从高度最小项读起,找出其上下左右格子滑行距离最大的,然后+1作为该点的滑行距离(如果周围全是0,则该点为1,由于高度排序好了,所以只要是滑行距离非零的邻点一定可以到达) 最后输出滑行距离最大值 代码如下: #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int MAX_SIZE=100+5; struct Point { int i,j,w; }; bool cmp(Point a,Point b) { return a.w<b.w; } int main() { int m,n; //freopen("in.txt","r",stdin); scanf("%d %d",&m,&n); Point *point =new Point[m*n]; int tr[MAX_SIZE][MAX_SIZE]={0}; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { scanf("%d",&point[n*i+j].w); point[n*i+j].i=i; point[n*i+j].j=j; } } sort(point,point+m*n,cmp); int Max=0; for(int i=0;i<m*n;i++) { int u=0; if(point[i].i!=0&&u<tr[point[i].i-1][point[i].j]) u=tr[point[i].i-1][point[i].j];//up if(point[i].i!=m-1&&u<tr[point[i].i+1][point[i].j]) u=tr[point[i].i+1][point[i].j];//down if(point[i].j!=0&&u<tr[point[i].i][point[i].j-1]) u=tr[point[i].i][point[i].j-1];//left if(point[i].j!=n-1&&u<tr[point[i].i][point[i].j+1]) u=tr[point[i].i][point[i].j+1];//right tr[point[i].i][point[i].j]=u+1; printf("h[%d][%d]=%d\n",point[i].i,point[i].j,u+1); if(Max<u+1) Max=u+1; } printf("%d\n",Max); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator