题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5273

思路:二分枚举x。

#include <cstdio>
using namespace std;
const int MAXN = ;
typedef long long LL;
struct Rectangle{
int l, t, w, h;
LL area;
}rect[MAXN];
int R, n;
LL sum;
LL getArea(int x)
{
LL ret = ;
for(int i = ; i < n; i++)
{
if(rect[i].l+rect[i].w <= x)
{
ret += rect[i].area;
}
else if(rect[i].l < x)
{
ret += ((LL)(x - rect[i].l) * rect[i].h);
}
}
return ret;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
sum = ;
scanf("%d %d", &R, &n);
for(int i = ; i < n; i++)
{
scanf("%d %d %d %d", &rect[i].l, &rect[i].t, &rect[i].w, &rect[i].h);
rect[i].area = ((LL)rect[i].w * rect[i].h);
sum += rect[i].area;
}
if(sum == )
{
printf("%d\n", R);
continue;
}
//尽可能使x两边的oases的面积之和相等
int left = -, right = R;//求right.将right初始化为可能的答案,left初始化为取不到的数值.
while(right - left > )
{
int mid = (left + right) >> ;
LL sl = getArea(mid);
LL sr = sum - sl;
if(sl >= sr)
{
right = mid;
}
else
{
left = mid;
}
} //尽可能使x靠右
int s = getArea(right);
left = right, right = R+;//求left.将left去初始化为可能的答案,将right初始化为取不到的答案.
while(right - left > )
{
int mid = (left + right) >> ;
if(getArea(mid) <= s)
{
left = mid;
}
else
{
right = mid;
}
}
printf("%d\n", left);
}
return ;
}

二分答案的过程中左右区间的划分问题。大于等于答案的最左值 mid = (left + right) >> 1; 小于等于答案的最右值 mid = (left + right + 1) >> 1;

#include <cstdio>
using namespace std;
const int MAXN = ;
typedef long long LL;
struct Rect{
int l, t, w, h;
}rect[MAXN];
int n, R;
LL sum;
LL getArea(int x)
{
LL area = ;
for(int i = ; i < n; i++)
{
if(rect[i].l + rect[i].w <= x)
{
area += ((LL)rect[i].w * rect[i].h);
}
else if(rect[i].l < x)
{
area += ((LL)rect[i].h * (x - rect[i].l));
}
}
return area;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
sum = ;
scanf("%d %d", &R, &n);
for(int i = ; i < n; i++)
{
scanf("%d %d %d %d", &rect[i].l, &rect[i].t, &rect[i].w, &rect[i].h);
sum += ((LL)rect[i].w * rect[i].h);
} int left = , right = R;
while(right > left)
{
int mid = (left + right) >> ; //求大于等于答案的最左值
LL s1 = getArea(mid);
LL s2 = sum - s1;
if(s1 >= s2)
{
right = mid;
}
else
{
left = mid + ;
}
} LL tag = getArea(right);
left = right, right = R;
while(right > left)
{
int mid = (left + right + ) >> ; //求小于等于答案的最右值
if(getArea(mid) <= tag)
{
left = mid;
}
else
{
right = mid - ;
}
}
printf("%d\n", left);
}
return ;
}

UVALive7261(2015ACM/ICPC北京赛区现场赛A)的更多相关文章

  1. ACM总结——2017ACM-ICPC北京赛区现场赛总结

    现在距离比赛结束已经过了一个多星期了,也是终于有时间写下心得了.回来就是被压着做项目,也是够够的. 这次比赛一样是我和两个学弟(虽然是学弟,但我的实力才是最弱的T_T)一起参加的,成绩的话打铁,算是情 ...

  2. 2014 ACM/ICPC 鞍山赛区现场赛 D&amp;I 解题报告

    鞍山现场赛结束了呢-- 我们出的是D+E+I三道题-- 吾辈AC掉的是D和I两道,趁着还记得.先在这里写一写我写的两道水题D&I的解题报告吧^_^. D题的意思呢是说星云内有一堆排成一条直线的 ...

  3. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  4. HDU 5120 A Curious Matt(2014北京赛区现场赛A题 简单模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5112 解题报告:扫一遍 #include<cstdio> #include<cstr ...

  5. HDU 5120 Intersection(2014北京赛区现场赛I题 计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 解题报告:给你两个完全相同的圆环,要你求这两个圆环相交的部分面积是多少? 题意看了好久没懂.圆环 ...

  6. HDU 4793 Collision (解二元一次方程) -2013 ICPC长沙赛区现场赛

    题目链接 题目大意 :有一个圆硬币半径为r,初始位置为x,y,速度矢量为vx,vy,有一个圆形区域(圆心在原点)半径为R,还有一个圆盘(圆心在原点)半径为Rm (Rm < R),圆盘固定不动,硬 ...

  7. [hdu5113]Black And White2014北京赛区现场赛B题(搜索加剪枝)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Black And White Time Limit: 2000/2000 MS ...

  8. Substrings 第37届ACM/ICPC 杭州赛区现场赛C题(hdu 4455)

    http://acm.hdu.edu.cn/showproblem.php?pid=4455 https://icpcarchive.ecs.baylor.edu/index.php?option=c ...

  9. hdu 4431 第37届ACM/ICPC 天津赛区现场赛A题 枚举

    题意:就是给了13张牌.问增加哪些牌可以胡牌.m是数字,s是条,p是筒,c是数字 胡牌有以下几种情况: 1.一个对子 +  4组 3个相同的牌或者顺子.  只有m.s.p是可以构成顺子的.东西南北这样 ...

随机推荐

  1. 微信小程序获取当前页面的路径的方式

    使用getCurrentPages可以获取当前加载中所有的页面对象的一个数组,数组最后一个就是当前页面. var pages = getCurrentPages() //获取加载的页面 var cur ...

  2. java.util.Collection List与其子类 Set与其子类

    package com.Collection; import java.util.ArrayList; import java.util.Collection; import java.util.It ...

  3. SpringInAction--XML配置Spring Aop

    前面学习了如何用注解的方式去配置Spring aop,今天把XML配置的方法也看了下,下面顺便也做了个记录 先把spring中用xml配置aop的配置元素给贴出来: <aop:advisor&g ...

  4. JWT的详细简介

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准.该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场 ...

  5. 配置wampserver 虚拟主机

    1.修改http.conf 找到,#Include conf/extra/httpd-vhosts.conf,修改为(有的版本服务器,默认是开启的): 2.配置httpd-vhosts.conf文件, ...

  6. rabbitmq安装部署

    本文主要介绍rabbitmq-server-3.6.12的安装部署 #  检查是否已经安装旧版本的软件 rpm -qa|grep erlang rpm -qa|grep rabbitmq # 如果之前 ...

  7. 每天一个linux命令(权限):【转载】chown命令

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  8. bzoj 5288 游戏

    bzoj 5288 游戏 显然从点 \(x\) 出发,能到达的点是包含 \(x\) 的一段区间.用 \(L,R\) 两个数组记录每个点对应的区间端点. 如果能预处理出 \(L,R\) ,询问显然可以 ...

  9. MySQL中大数字加减,不产生千位符和科学计数

    mysql数字加减科学计数法 这两天因为需求,需要获取一张表的流水号.规则是这样的.当前日期+8位流水号.比如:2015062400000001,2015062400000002,2015062400 ...

  10. 解决js代码中加入alert()就成功执行,不加就不对的问题!

    问题: jquery中的$(document).ready(function(){})中调用两个方法(1)利用ajax请求去后台查图书类别的方法(2)当页面上利用图书类别去查询图书返回页面,让图书类别 ...