The Troublesome Frog--POJ 1054

本文介绍了一种使用模拟法和暴力法解决青蛙跳跃路径问题的方法,通过排序和遍历寻找最大跳跃步数,实现了对特定区域内青蛙跳跃路径的有效计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、题目类型:模拟、暴力法。

2、解题思路:(1)根据输入建立跳点的pos[]数组和标识位置的map[][]矩阵;(2)对跳点按照其横坐标进行排序;(3)暴力法遍历排序好的的跳点比较获得最大的步数,时间复杂度为nlog(n)。

3、注意事项:注意青蛙从区域的外面跳入,必须沿着直线方向跳出区域。

4、实现方法:

#include<iostream>
#include
<algorithm>
using namespace std;

struct Point
{
int x,y;
};

int R,C,cnt;
Point pos[
5010];
bool map[5010][5010];

int cmp(Point A,Point B)
{
if(A.x==B.x)
return A.y<B.y;
else
return A.x<B.x;
}

void Solve()
{
int i,j,CC,ans=-1;
int disx,disy,tmpx,tmpy;
sort(pos,pos
+cnt,cmp);
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
disx
=pos[j].x-pos[i].x;
disy
=pos[j].y-pos[i].y;
tmpx
=pos[j].x;
tmpy
=pos[j].y;
CC
=2;
if((pos[i].x-disx>=1&&pos[i].x-disx<=R&&pos[i].y-disy>=1&&pos[i].y-disy<=C))
continue;
while(tmpx+disx>=1 && tmpx+disx<=R && tmpy+disy>=1 && tmpy+disy<=C)
{
if(map[tmpx+disx][tmpy+disy])
{
tmpx
=tmpx+disx;
tmpy
=tmpy+disy;
CC
++;
}
else
goto L;
}
if(CC>ans)
ans
=CC;
L:
;
}
}

if(ans<3)
cout
<<'0'<<endl;
else
cout
<<ans<<endl;
}

int main()
{
int i;
cin
>>R>>C;
cin
>>cnt;
memset(map,
0,sizeof(map));
for(i=0;i<cnt;i++)
{
cin
>>pos[i].x>>pos[i].y;
map[pos[i].x][pos[i].y]
=1;
}
Solve();
return 0;
}

 

转载于:https://www.cnblogs.com/yongze103/archive/2010/09/24/1833920.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值