uvalive3695(降维+扫描)
2015-02-09 19:27
288 查看
题意:
给出n个点,让你找一个矩形,是最多的点在矩形边上;
思路:
看了大白的思路:
就是枚举矩形的上下边;
然后每次枚举出上下边界,就从左往右扫描描;
left[i]表示从这条竖线往左一共几个点在上下两边;
on[i]和on2[i]都表示这条竖线上有几个点,on不包括上下边的,而on2包括;
AC:
给出n个点,让你找一个矩形,是最多的点在矩形边上;
思路:
看了大白的思路:
就是枚举矩形的上下边;
然后每次枚举出上下边界,就从左往右扫描描;
left[i]表示从这条竖线往左一共几个点在上下两边;
on[i]和on2[i]都表示这条竖线上有几个点,on不包括上下边的,而on2包括;
AC:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 105; int x ; int y ; int left ; int on ; int on2 ; int n; struct point{ int x; int y; }p ; int cmp(point a, point b) { return a.x < b.x; } int solve() { sort(p, p + n, cmp); sort(y, y + n); int m = unique(y, y + n) - y; if(m <= 2) return n; int ans = 0; for(int i = 0; i < n; i++) { for(int j = i + 1; j < n; j++) { int uy = y[i]; int dy = y[j]; if(uy == dy) continue; int num = 0; for(int k = 0; k < n; k++) { if(k == 0 || p[k].x != p[k - 1].x) { num++; on[num] = on2[num] = 0; left[num] = left[num - 1] + on2[num - 1] - on[num - 1]; } if(p[k].y > uy && p[k].y < dy) on[num]++; if(p[k].y >= uy && p[k].y <= dy) on2[num]++; } if(num <= 2) return n; int m = 0; for(int k = 1; k <= num; k++) { ans = max(ans, left[k] + on2[k] + m); m = max(m, on[k] - left[k]); } } } return ans; } int main() { int cas = 1; while(scanf("%d", &n) && n) { for(int i = 0; i < n; i++) { scanf("%d%d",&p[i].x, &p[i].y); y[i] = p[i].y; } printf("Case %d: %d\n",cas++ ,solve()); } return 0; }
相关文章推荐
- UVaLive 3695 Distant Galaxy (扫描线)
- UVALive 3695 (博弈 bfs)
- UVALive 3905-Meteor-扫描线算法
- uvalive 3695
- UVALive 2519 Radar Installation 雷达扫描 区间选点问题
- uvalive 3905 扫描线:求包含区间最多的点
- UVALive 3029 City Game (扫描维护)
- UVALive 3695 Distant Galaxy (部分枚举,扫描维护)
- UVaLive LA 4356 - Fire-Control System (扫描法 思维)
- UVALive 2519 Radar Installation 雷达扫描 区间选点问题
- uvalive 6864 扫描线和技巧
- Meteor UVALive - 3905 (区间扫描)
- UVALive 3695 Distant Galaxy 用矩阵的边覆盖二维平面上最多的点 科学的枚举
- UVALive - 3695 Distant Galaxy 暴力
- Distant Galaxy UVALive - 3695(部分枚举+动态规划)
- 【扫描线】uvalive 7261 Xiongnu's Land
- UVALive 7261 Xiongnu's Land 扫描线
- UVALive - 6864 Strange Antennas 扫描线
- UVALive - 4851 Restaurant 扫描
- uva10755(降维 +扫描)