博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 1054 The Troublesome Frog 暴力+剪枝
阅读量:6622 次
发布时间:2019-06-25

本文共 1925 字,大约阅读时间需要 6 分钟。

 

题意:

给你r*c的一块稻田,每个点都种有水稻,青蛙们晚上会从水稻地里穿过并留下脚印,问题确保青蛙的每次跳跃的长度想相同,而且沿直线行走,给出n个青蛙的脚印点问存在大于等于3的最大青蛙走的连续的脚印个数;若不存在输出0

思路:

这题O(n^3)的三次方+j剪枝竟然能过无语了。。。。首先排序,然后O(n^2)枚举任意两点找直线,O(n^2)判断同一直线并且是同一青蛙留下的脚印然后求最大值。

剪枝:

1:青蛙的起点肯定在稻田外;2:该点的直线上的脚印一定要大于上一次的点数;3:多余上一点的基础上点要在稻田内;

View Code
#include 
#include
#include
#include
#include
#define maxn 5007#define N 8using namespace std;const int inf = 99999999;struct node{ int x,y;}p[maxn];int map[maxn][maxn];int n,r,c;int cmp(node a,node b){ if (a.x != b.x) return a.x < b.x; else return a.y < b.y;}bool inMap(int x,int y){ if (x > 0 && x <= r && y > 0 && y <= c) return true; else return false;}int getS(int x,int y,int dx,int dy){ int sum = 0; while (inMap(x,y)) { if (!map[x][y]) return 0;//注意这里一定要返回0,因为这里错了好多次 //首先如果我们发现青蛙的路径一定在最后走出稻田的,如果在找点的时候 //还为走出稻田就发现不存在的点了,就说明我们找的不是青蛙正确的路径 //而可能是多条路径交叉所得,所以一定要返回0 sum++; x += dx; y += dy; } return sum;}int main(){ //freopen("d.txt","r",stdin); int i,j; while (~scanf("%d%d",&r,&c)) { scanf("%d",&n); memset(map,0,sizeof(map)); for (i = 0; i < n; ++i) { scanf("%d%d",&p[i].x,&p[i].y); map[p[i].x][p[i].y] = 1; } sort(p,p + n,cmp); int ans = 2; for (i = 0; i < n; ++i) { for (j = i + 1; j < n; ++j) { int dx = p[j].x - p[i].x; int dy = p[j].y - p[i].y; if (p[i].x + ans*dx > r || p[i].y + ans*dy > c) continue;//剪枝1 if (inMap(p[i].x - dx,p[i].y - dy)) continue;//剪枝2 if (!inMap(p[i].x + ans*dx,p[i].y + ans*dy)) continue;//剪枝3 ans = max(ans,getS(p[i].x,p[i].y,dx,dy)); } } if (ans < 3) printf("0\n"); else printf("%d\n",ans); } return 0;}

 

转载地址:http://rjvpo.baihongyu.com/

你可能感兴趣的文章
初探DeepEarth控件
查看>>
SCVMM2008之P2V转换
查看>>
分布式OSSIM系统的控制中心
查看>>
突破极限 解决大硬盘上安装Unix新思路
查看>>
Rpm另类用法加固Linux安全
查看>>
CocoStudio游戏发布后资源加密大致实现思路
查看>>
WPF SL 获取RichTextBox 的内容(string)
查看>>
为什么NTFS删除超过4G大文件或数据库文件后FILE RECORD大小表现为0
查看>>
【iOS-Cocos2d开发之三】CCScene切换的所有特效,以及设置屏幕横竖屏!
查看>>
Spring切入点表达式常用写法
查看>>
微软同步框架入门之五--使用WCF同步远程数据
查看>>
Last-Modified、If-Modified-Since 实现缓存和 OutputCache 的区别
查看>>
漂亮彩色验证码 以及 数学运算表达式形式的验证码
查看>>
理解SQL代理错误日志
查看>>
维护计划作业
查看>>
Multipart Internet Mail Extensions (MIME)
查看>>
C# WinForm控件之Dock顺序调整
查看>>
中控科技 ZK Software的售后服务真像一坨屎,技术人员嚣张
查看>>
关于反模式、设计和复用的一些想法
查看>>
NSPredicate过滤数组数据
查看>>