| ||||||||||
| 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 | |||||||||
缩衣节食终于过了……,内存超了3次……#include<stdio.h>
#include<malloc.h>
#define HIGH(x) ((x&0xffff0000)>>16)
#define LOW(x) (x&0x0000ffff)
#define Get1(x) ((x&0xff000000)>>24)
#define Get2(x) ((x&0x00ff0000)>>16)
#define Get3(x) ((x&0x0000ff00)>>8)
#define Get4(x) (x&0x000000ff)
int cmp(int * ar,int a,int b)
{
return HIGH(ar[a])-HIGH(ar[b]);
}
void swap(int * array,int a,int b){
int temp;
temp=array[a];
array[a]=array[b];
array[b]=temp;
}
void qsort(int * array,int low,int high,int Comp(int * array,int ,int ))
{
int middle,i;
if(low>=high)
return;
middle=(low+high)/2;
swap(array,low,middle);
for(middle=low,i=low+1;i<=high;i++){
if(Comp(array,low,i)>0)
swap(array,++middle,i);
}
swap(array,low,middle);
qsort(array,low,middle-1,Comp);
qsort(array,middle+1,high,Comp);
}
int getx(int a,int c)
{
switch(c){
case 1:
return Get3(a)-1;
case 2:case 4:
return Get3(a);
case 3:
return Get3(a)+1;
default:
return 0;
}
}
int gety(int a,int c)
{
switch(c){
case 1:case 3:
return Get4(a);
case 2:
return Get4(a)+1;
case 4:
return Get4(a)-1;
default:
return 0;
}
}
int main()
{
int R,C,* * hill,* * va,x,y,i,j,h,m;
int * rank;
scanf("%d %d",&R,&C);
h=R*C;
rank=(int *)malloc(sizeof(int)*(h+1));
hill=(int **)malloc(sizeof(int *)*(R+1));
for(i=1;i<=R;i++)
hill[i]=(int *)malloc(sizeof(int )*(C+1));
va=(int **)malloc(sizeof(int *)*(R+1));
for(i=1;i<=R;i++)
va[i]=(int *)malloc(sizeof(int )*(C+1));
for(x=1,i=1;x<=R;x++)
for(y=1;y<=C;y++,i++){
scanf("%d",&hill[x][y]);
va[x][y]=1;
rank[i]=0;
rank[i]|=hill[x][y]<<16;
rank[i]|=x<<8;
rank[i]|=y;
}
qsort(rank,1,h,cmp);
for(i=1,m=1;i<=h;i++){
for(j=1;j<=4;j++){
x=getx(rank[i],j);
y=gety(rank[i],j);
if(x>R||y>C||!x||!y)
continue;
if(hill[x][y]<(signed)HIGH(rank[i])){
if(va[Get3(rank[i])][Get4(rank[i])]<=va[x][y])
va[Get3(rank[i])][Get4(rank[i])]=va[x][y]+1;
}
}
if(m<va[Get3(rank[i])][Get4(rank[i])])
m=va[Get3(rank[i])][Get4(rank[i])];
}
printf("%d",m);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator