uva 1382
来源:互联网 发布:java枚举类型enum 编辑:程序博客网 时间:2024/06/09 18:13
题意:找一个矩形,使得矩形的边上拥有最多的星星。输出星星的数量。
这一题依旧用维护的方法做。l[i]为竖线i左边上下界上的点。on[i]为竖线i上,不在上下边界的点的数量。on1[i],则包含上下边界。
抱歉,图没了,不知道怎么弄,看看厚白书吧。如果是没有的大兄弟,嗯~~~,自己画画图吧。
说起来,细节还是挺多的,参考厚白书。
扫描是枚举上下边界,从左到右扫描。左边界找到最大的on[CD] - l[CD]就行了。还用的了unique函数,建议百度一下。
#include<cstdio>#include<algorithm>using namespace std;const int maxn = 100 + 5;struct corr{ int x; int y; bool operator < (const corr &a) const { return x < a.x; }} star[maxn];int cy[maxn];int l[maxn], on[maxn], on1[maxn];int main(){ int n; int kase = 1; while(scanf("%d", &n) == 1 && n) { for(int i = 0; i < n; i++) { scanf("%d%d", &star[i].x, &star[i].y); cy[i] = star[i].y; } sort(star, star + n); sort(cy, cy + n); int ans = 0; int m = unique(cy, cy + n) - cy; for(int i = 0; i < m; i++) for(int j = i + 1; j < m; j++) { int ymin = cy[i]; int ymax = cy[j]; int line = 0; on[line] = on1[line] = l[line] = 0; for(int k = 0; k < n; k++) { if(k == 0 || star[k - 1].x != star[k].x) { line++; on[line] = on1[line] = 0; l[line] = line == 0 ? 0 : l[line - 1] + on1[line - 1] - on[line - 1]; } if(star[k].y < ymax && star[k].y > ymin) on[line]++; if(star[k].y <= ymax && star[k].y >= ymin) on1[line]++; } int M = 0; for(int k = 1; k <= line; k++) { ans = max(ans, l[k] + on1[k] + M); M = max(M, on[k] - l[k]); } } if(m <= 2 ) ans = n; printf("Case %d: %d\n", kase++, ans); } return 0;}
阅读全文
0 0
- uva 1382
- uva 1382 - Distant Galaxy
- uva 1382 - Distant Galaxy
- UVA - 1382 Distant Galaxy
- UVa:1382 Distant Galaxy
- UVA 1382 - Distant Galaxy
- UVA 1382 Distant Galaxy
- UVA - 1382 Distant Galaxy
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- 剑指offer第三题Java
- php函数call_user_func和call_user…
- Win+Nginx+PHP+MySQL环境搭建
- JavaScript面向对象编程
- PHP缓存技术
- uva 1382
- 活者的原则
- 弹簧效果切换按钮
- 不要把学生气带入社会
- vmware虚拟机NAT模式下网络配置
- mysql索引优化
- Virtualbox 安装gost xp
- linux 下编译安装php mongodb扩展
- HDU-4825 Xor Sum (Trie 字典树 2014年百度之星程序设计大赛-资格赛)