POJ - 1054 The Troublesome Frog 模拟 枚举优化。
题意:有个R*C的格网。上面有若干个点,这些点可以连成一些直线,满足:这些点在直线上均匀排布(也就是间隔相等),直线的两段穿过网格(也就是第一个,最后一个在网格的边界附近)
求某条直线上最多的点数
题解:先排序,再任取两个水稻,算出之间的dx,dy,然后就能推出前后的水稻坐标,用如果满足路径上一直有水稻(用binarysearch),且第一个点与最后一个点在水稻外面,就是一个可行的解,维护其最大值。
注意一些判断。
ac代码:
#include<iostream>
#include<algorithm>
#define _for(i,a,b) for(int i=(a);i<(b);i++)
using namespace std;
const int maxn = 5e3 + ;
struct plant {
int x, y;
bool operator <(const plant b)const { return this->x == b.x ? this->y < b.y : this->x < b.x; }
//bool operator ==(const plant b)const { return this->x == b.x&&this->y == b.y; }
}p[maxn];
int c, r;
int n;
int dx, dy, px, py,mx=,steps;
int searchPath(plant p1, int dx, int dy) {
plant dp;
dp.x = p1.x + dx;
dp.y = p1.y + dy;
int steps =;
while (dp.x <= r&&dp.x >= && dp.y <= c&&dp.y >= ) {
if (!binary_search(p, p + n, dp)) {steps = ; break;}
dp.x += dx;
dp.y += dy;
steps++;
}
return steps;
}
int main() { cin >> r >> c; cin >> n;
_for(i, , n) {
cin >> p[i].x >> p[i].y;
}
sort(p, p + n);
_for(i, , n - )_for(j, i + , n - ) {
dx = p[j].x - p[i].x;
dy = p[j].y - p[i].y;
px = p[i].x -dx;
py = p[i].y -dy;
if (px <= r&&px >= && py <= c&&py >= )continue;
if (p[i].x + (mx - )*dx > r)break;//已经是最小dx了,这都不满足,直接换第一个点
if (p[i].y + (mx - )*dy > c|| p[i].y + (mx - )*dy < )continue;//dy并不递增,也可能小于0
steps = searchPath(p[j], dx, dy);
mx = max(mx, steps);
}
cout << (mx == ? :mx);
}
POJ - 1054 The Troublesome Frog 模拟 枚举优化。的更多相关文章
- POJ 1054 The Troublesome Frog(枚举+剪枝)
题目链接 题意 :给你r*c的一块稻田,每个点都种有水稻,青蛙们晚上会从水稻地里穿过并踩倒,确保青蛙的每次跳跃的长度相同,且路线是直线,给出n个青蛙的脚印点问存在大于等于3的最大青蛙走的连续的脚印个数 ...
- POJ 1054 The Troublesome Frog
The Troublesome Frog Time Limit: 5000MS Memory Limit: 100000K Total Submissions: 9581 Accepted: 2883 ...
- poj 1054 The Troublesome Frog (暴力搜索 + 剪枝优化)
题目链接 看到分类里是dp,结果想了半天,也没想出来,搜了一下题解,全是暴力! 不过剪枝很重要,下面我的代码 266ms. 题意: 在一个矩阵方格里面,青蛙在里面跳,但是青蛙每一步都是等长的跳, 从一 ...
- POJ 1054 The Troublesome Frog 枚举
这个题分类是dp,想了一会没有想出来,就去看别人题解了.发现别人题解全是暴力枚举= =.复杂度超过 N^2,但可能是剪枝的作用,没有超时. 思路:将所有点按坐标由小到大排序.两两枚举点p1,p2,并判 ...
- Poj 1054 The Troublesome Frog / OpenJudge 2812 恼人的青蛙
1.链接地址: http://poj.org/problem?id=1054 http://bailian.openjudge.cn/practice/2812 2.题目: 总时间限制: 10000m ...
- (中等) POJ 1054 The Troublesome Frog,记忆化搜索。
Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...
- 【POJ】1054 The Troublesome Frog
题目是非常经典的搜索+剪枝.题意简言之就是,青蛙需要沿着直线踩着踏点通过田地,并且踏点需要至少为3.问哪条路径青蛙踩坏的作物最多.很好的一个条件是青蛙每次移动都是等间距的.题目需要注意将其排序. #i ...
- POJ1054 The Troublesome Frog
题目来源:http://poj.org/problem?id=1054 题目大意: 有一种青蛙在晚上经过一片稻田,在庄稼上跳跃,会把庄稼压弯.这让农民很苦恼.我们希望通过分析青蛙跳跃的路径,找出对稻田 ...
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
随机推荐
- 5 -- Hibernate的基本用法 --4 深入Hibernate配置文件
Hibernate的持久化操作离不开SessionFactory对象,这个对象是整个数据库映射关系经过编译后的内存镜像,该对象的openSession()方法可打开Session对象.该对象通常由Co ...
- 胡思乱想 & 胡言乱语
其大无外,其小无内,在数学上是不存在的,有无穷大,又有无限逼近于0而永远不等于0 现实中,人们对事物的认知局限于科学工艺的发展,往小的方面说,在没有显微镜之前,我们能看到的最小的东西莫过于尘埃,其后认 ...
- php mongodb manager 查数据的各种姿势
一.连接 mongodb 数据库 以下操作默认都是以上面操作为前提(已连接成功)而做的操作 二.查的各种姿势 1)通过主键_id来查询,注意:_id不是直接用字符串来表示,要用 new \MongoD ...
- Nginx 防盗链
“盗链”的定义是:此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些小网站来盗取一些有实力的大网站的地址(比如一些 ...
- Unity透明Shader
Shader "Custom/Blocks" { Properties { _Color (,,,) _MainTex ("Albedo (RGB)", 2D) ...
- 流程控制与数组——Java疯狂讲义
顺序结构 if分支语句 if{} 可以有多个else if{} else{} 可以省略 switch分支语句 while循环 do while循环 for循环 嵌套循环 控制循环结构 理解数 ...
- thinkphp5.0 获取请求信息
如果要获取当前的请求信息,可以使用\think\Request类,除了下文中的 $request = Request::instance(); 也可以使用助手函数 $request = request ...
- Material Design系列第五篇——Working with Drawables
Working with Drawables This lesson teaches you to Tint Drawable Resources Extract Prominent Colors f ...
- mac下升级terminal/终端的subversion版本方法
雖然現在程式碼管理已經以 Git 為主了,不過偶爾需要維護一些舊案子還是會用 SVN,懶得轉了. Mac OS 本身有內建 SVN,不過卻是 1.6 版,最近修改一個舊案子就有碰到 project 已 ...
- H.264 White Paper学习笔记(一)总览
H.264 White Paper对于264编码器的原理讲的比较透彻,在阅读学习的时候收获很大,这份文献网上有很多了,也有不少人翻译,不过想要理解更清楚我觉得还是得看英文原版的. 首先看一下白皮书里给 ...