POJ1054-The Troublesome Frog
2016-10-21 17:51
393 查看
两点确定一条直线,所以枚举两个点即可。
#include <cstdio> #include <algorithm> using namespace std; typedef pair<int, int> P; const int maxn = 5000 + 5; P flat[maxn]; int r, c, n; int search(int x, int y, int dx, int dy) { int cnt = 2; int nx = x + dx; int ny = y + dy; while (nx >= 1 && nx <= r && ny >= 1 && ny <= c) { if (!binary_search(flat, flat + n, P(nx, ny))) { return 0; } cnt++; nx += dx; ny += dy; } return cnt; } int main(int argc, char const *argv[]) { scanf("%d%d", &r, &c); scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d%d", &flat[i].first, &flat[i].second); } sort(flat, flat + n); int ans = 2; for (int i = 0; i < n - 2; i++) { for (int j = i + 1; j < n - 1; j++) { int dx = flat[j].first - flat[i].first; int dy = flat[j].second - flat[i].second; int tx = flat[i].first - dx; int ty = flat[i].second - dy; if (tx >= 1 && tx <= r && ty >= 1 && ty <= c) { continue; } if (flat[i].first + ans * dx > r) { break; } if (flat[i].second + ans * dy > c) { continue; } int cnt = search(flat[j].first, flat[j].second, dx, dy); ans = max(ans, cnt); } } if (ans <= 2) { ans = 0; } printf("%d\n", ans); return 0; }
相关文章推荐
- poj 1054 The Troublesome Frog
- POJ 1054 The Troublesome Frog
- 【POJ】1054 The Troublesome Frog
- 【poj 1054】The Troublesome Frog 题意&题解&代码(C++)
- POJ 1054 The Troublesome Frog(枚举+剪枝)
- poj1054--The Troublesome Frog(枚举+二分)
- IOI2002 POJ1054 The Troublesome Frog 讨厌的青蛙 (离散化+剪枝)
- POJ 1054 Java: The Troublesome Frog
- poj1054 The Troublesome Frog 瞎搞。
- POJ 1054 The Troublesome Frog
- poj 1054 The Troublesome Frog
- POJ 1054 The Troublesome Frog(枚举 + 剪枝)
- POJ--1054--The Troublesome Frog
- Poj 1054 The Troublesome Frog / OpenJudge 2812 恼人的青蛙
- POJ 1054 The Troublesome Frog
- POJ 1054 The Troublesome Frog 搜索+剪枝
- POJ-1054 The Troublesome Frog 搜索+剪枝 Or DP+Hash
- POJ 1054 The Troublesome Frog
- POJ 1054 The Troublesome Frog(dp+剪枝)
- POJ 1054 The Troublesome Frog