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。。求解。。。#include<iostream> #include<algorithm> using namespace std; struct arr{ int x,y,z; //存相应高度的值,和行数,列数 } array[10010]; bool cmp(const arr& a,const arr& b) { return a.z>b.z; } int solve(int b,int c,int d,int e,int f) //对四个方位进行判断 读出最接近当前高度 的数 { int ii,check[4],sum,sign=1; check[0]=c; check[1]=d; check[2]=e; check[3]=f; sort(check,check+4); for(ii=3;ii>=0;ii--) { if(check[ii]<b) //判断与当前高度的关系 如果都比当前高度大 则输出 -1 { sign=0; sum=check[ii]; break; } } if(sign) return -1; else return sum; } int main() { int a[105][105]; int i,j,k=0,l=0,r,c,m,s,max,flag=0,count=0; cin>>r>>c; for(i=0;i<r+2;i++) //初始化二维数组为-1 { for(j=0;j<c+2;j++) a[i][j]=-1; } for(i=1;i<r+1;i++) //输入值 并保存坐标和值 { for(j=1;j<c+1;j++) { cin>>a[i][j]; array[k].z=a[i][j]; array[k].x=i; array[k].y=j; k++; } } sort(array,array+k,cmp); //对高度从大到小进行排序 s=array[count].z; while(1) { l=0; for(m=0;m<k;m++) { if(s==array[m].z) { s=solve(array[m].z,a[array[m].x+1][array[m].y],a[array[m].x-1][array[m].y],a[array[m].x][array[m].y+1],a[array[m].x][array[m].y-1]); l++; //每成功输出一个s长度加1 if(s==-1) break; } } s=array[++count].z; if(l>max) max=l; if(max>=array[count+1].z) flag=1; //如果当前下滑距离大于或等于接下去一个高度 跳出 if(flag) break; } cout<<max<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator