ACM 2015 亚洲区域赛北京赛区A题(二分)
来源:互联网 发布:华彬集团网络商学院 编辑:程序博客网 时间:2024/05/22 06:34
该题方法就是二分, 二分R,然后在判断函数中判断在枚举点左边的绿洲面积。 这样做的复杂度是O(nlogR)。
但是一开始WA了一发,后来才发现原来是因为有这样的数据:一块很大的沙漠中只有一个边长为1的小正方形绿洲。这样的数据答案是R。 所以我二分出来之后再向右推一下,直到不符合条件为止。
下面是我AC代码, 二分求的上界,求下界应该更快,请读者自己实现。
细节参见代码:
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<string>#include<vector>#include<stack>#include<bitset>#include<cstdlib>#include<cmath>#include<set>#include<list>#include<deque>#include<map>#include<queue>using namespace std;typedef long long ll;const double PI = acos(-1.0);const double eps = 1e-6;const int INF = 1000000000;const int maxn = 10000+5;int T,n,m,R;ll sum;struct node { ll x,y,w,h; bool operator < (const node& rhs) const { return x < rhs.x || (x == rhs.x && y < rhs.y); }}a[maxn];bool D(int m) { ll tot = 0; for(int i=0;i<n;i++) { if(a[i].x+a[i].w <= m) { tot += a[i].w*a[i].h; } else if(a[i].x >= m) break; else if(a[i].x <= m && m <= a[i].x+a[i].w) { tot += (m-a[i].x)*a[i].h; } } if(tot >= sum-tot) return true; else return false;}ll hehe(int m) { ll tot = 0; for(int i=0;i<n;i++) { if(a[i].x+a[i].w <= m) { tot += a[i].w*a[i].h; } else if(a[i].x >= m) break; else if(a[i].x <= m && m <= a[i].x+a[i].w) { tot += (m-a[i].x)*a[i].h; } } return tot;}int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&R,&n); sum = 0; for(int i=0;i<n;i++) { scanf("%I64d%I64d%I64d%I64d",&a[i].x,&a[i].y,&a[i].w,&a[i].h); sum += a[i].w*a[i].h; } sort(a,a+n); int l = 0, r = R+10, m; while(r > l) { m = (l+r)/2; if(D(m)) r = m; else l = m+1; } ll cur = hehe(r); while(true) { if(r > R) { r = R; break; } if(hehe(r) == cur) r++; else { r--; break; } } printf("%d\n",r); } return 0;}
0 0
- ACM 2015 亚洲区域赛北京赛区A题(二分)
- 2014ACM亚洲区域赛北京赛区(赛后总结)
- hdu5122 K.Bro Sorting (2014ACM亚洲区域赛北京赛区重现)
- 2016亚洲区域赛现场赛北京赛区e题
- 2016亚洲区域赛现场赛北京赛区f题
- 2016亚洲区域赛现场赛北京赛区k题
- 2017 ACM-ICPC 亚洲区(北京赛区)网络赛
- HDU 5115 Dire Wolf (2014ACM亚洲区域赛北京赛区重现)D
- 2015亚洲区域赛北京站A(二分)
- 2014 acm亚洲区域赛(北京)总结
- ZOJ3819 ACM-ICPC 2014 亚洲区域赛牡丹江赛区现场赛A题 Average Score 签到题
- 2017 ACM-ICPC 亚洲区(北京赛区)网络赛
- 2013 ACM/ICPC 亚洲区域赛长春赛区 总结
- 2017 ACM/ICPC 亚洲区域赛 青岛赛区
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 A. Banana(连通性水题)
- 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 A. Weather Patterns(阅读题)
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 G题 Query on a string
- ZOJ3822 ACM-ICPC 2014 亚洲区域赛牡丹江赛区现场赛D题Domination 概率DP(两种解法)
- 同样带来的是四道java笔试题
- Android裁剪图片为圆形
- 1058 A+B in Hogwarts
- electron(1)安装和使用
- 数据结构--栈(java)
- ACM 2015 亚洲区域赛北京赛区A题(二分)
- web入门第一天
- android基础--AsyncTask
- XML基础知识
- maven常见问题问答(超全面)
- 回顾Intent
- NOIP2015 提高组 day1 神奇的幻方
- adr,adrl和ldr指令的用法比较
- 每天进步一点点生活就是进步的