题目链接: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. asp.net连接MySQL数据库错误-Out of sync with server

    问题 网上说:http://wenda.haosou.com/q/1386389928069965 昨晚这个问题真的费了我不少时间(晚上9到凌晨2点),网上找解决方案,然后一个个尝试,没有成功.准备放 ...

  2. linux 字符串查找

    获取指定目录文件名包含指定字符的文件,然后遍历是否有包含特定字符串,有的话打出文件名 #!/bin/sh COMMAND=`find /data/home/ftp/data/20/201704/27/ ...

  3. C#学习历程(九)[类的定义与声明]

    一.C#中类的声明 在C#中必须先声明类,然后才能在程序中使用. 类的声明格式如下: [类的属性] [访问修饰符] class 类名称 [: 父类名]{    [成员修饰符] 类的成员变量或者成员函数 ...

  4. trigger 触发器(mysql)

    /* 触发器 tigger 引出触发器: 在进行数据库应用软件的开发的时候,我们有时候会碰到表中的某些数据改变,同事希望引起其他相关数据改变的需求,这时候就需要使用触发器. 运用触发器可以简化程序,增 ...

  5. Linux crontab使用及注意事项

    渗透测试中,经常会用到crontab来执行计划任务,从而实现后门程序的隐藏,但crontab有几个坑点还是需要记录一下,方便日后使用时及时查询 1.crontab配置格式 # Example of j ...

  6. Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON

    1.前言 对于优化SQL语句或存储过程,以前主要是用如下语句来判断具体执行时间,但是SQL环境是复杂多变的,下面语句并不能精准判断性能是否提高:如果需要精确知道CPU.IO等信息,就无能为力了. 1 ...

  7. iPhone开发资源汇总

    如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...

  8. ubuntu16.04LTS 64位 下载influxdb

    wget https://dl.influxdata.com/influxdb/releases/influxdb_1.2.0_amd64.deb sudo dpkg -i influxdb_1.2. ...

  9. 新手向——关于Python3.5在Windows 10 系统下发布模块的终极讲解

    博主自己在发布Python模块的时候也是摸索了好久啊,因为跟着书上写的步骤一步一步来终究会跪的节奏有木有啊!!!几经波折终于搞出来了,贴下来与诸君共勉.之前的步骤相信大家都已经知道了,那我们就直接跳过 ...

  10. 使用python处理selenium中的xpath定位元素的模糊匹配问题

    # 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath ...