艰难的写上一篇,小学期太累了,,,很难坚持刷
#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int m,n;
int num;
struct Grid
{
int x,y;
}grid[5555];
int cmp(const void* a,const void* b)
{
Grid* one;
Grid* two;
one=(Grid* ) a;
two=(Grid* ) b;
return ((one->x)==(two->x))?(one->y)-(two->y):(one->x)-(two->x);
}
int getstep(Grid grs,int dx,int dy)
{
int step=0;
while(grs.x<=n&&grs.x>=1 &&grs.y>=1&&grs.y<=m)
{
if(!bsearch(&grs,grid,num,sizeof(Grid),cmp))
{
step=0;
break;
}
else
{
grs.x+=dx,grs.y+=dy;
step++;
}
}
return step;
}
int main()
{
//ios::sync_with_stdio(false);
//freopen("/home/rainto96/in.txt","r",stdin);
while(scanf("%d%d",&m,&n)!=EOF)
{
scanf("%d",&num);
for(int i=0;i<=num;i++)
{
int xx,yy;
scanf("%d%d",&xx,&yy);
grid[i].x=yy,grid[i].y=xx;
}
qsort(grid,num,sizeof(Grid),cmp);
int maxn=2;
for(int i=0;i<num-1;i++)
{
for(int j=i+1;j<num;j++)
{
int dx,dy,px,py;
dx=grid[j].x-grid[i].x;
dy=grid[j].y-grid[i].y;
px=grid[i].x-dx;
py=grid[i].y-dy;
if(py>=1&&py<=m&&px>=1&&px<=n)
continue;
if(grid[i].x+maxn*dx>n)
break;
py = grid[i].y + maxn * dy;
if ( py > m || py < 1)
continue;
int step=getstep(grid[i],dx,dy);
maxn=max(maxn,step);
}
}
maxn=(maxn==2?0:maxn);
printf("%d\n",maxn);
}
return 0;
}
学会了二维的二分,其实就一句话
这个问题看起来很复杂,其实目的很简单:帮助农民找到为害最大的青蛙。也就是要找到
一条穿越稻田的青蛙路径,这个路径上被踩踏的水稻不少于其他任何青蛙路径上被踩踏的水POJ1054 The Troublesome Frog [dp],布布扣,bubuko.com
POJ1054 The Troublesome Frog [dp]
原文地址:http://blog.csdn.net/u011775691/article/details/36551419