题目链接:http://hihocoder.com/problemset/problem/1249

题目大意:有一个大正方形里面有好多不重叠的小矩形,怎么找出一条竖线分割这个正方形,使得两边的矩形面积尽量相等并且正方形左边的面积比右边大

思路:做两次二分就好了

 #include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
#define xx first
#define yy second
struct node{
int len,wid;
long long sum;
pair<int,int> p1;
pair<int,int> p2;
void cal(){
p2.xx=p1.xx+len;
p2.yy=p1.yy-wid;
sum=(long long)len*wid;
}
};
bool cmp(const node&a,const node&b){
return a.p1.xx<b.p1.xx;
}
const int maxn=1e4+;
node a[maxn];
int n,r;
long long check(int x){
long long tmp=;
for(int i=;i<=n;i++){
tmp+=((long long )a[i].wid*max(min(a[i].len,x-a[i].p1.xx),));
}
return tmp;
}
int binary_search(int R,long long sum){
int l=-,r=R+;
int mid;
while(r-l>){
mid=(l+r)>>;
long long tmp=check(mid);
if(tmp>=sum-tmp){
r=mid;
}
else l=mid;
}
long long ans=check(r);
l=-,r=R+;
while(r-l>){
mid=(l+r)>>;
long long tmp=check(mid);
if(tmp>ans) r=mid;
else l=mid;
}
return l;
}
int main(){
int T;
//freopen("C:\\Users\\acm\\Desktop\\2015Beijing\\in.txt","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d",&r);
scanf("%d",&n);
long long sum=;
for(int i=;i<=n;i++){
int x,y,len,wid;
scanf("%d %d %d %d",&x,&y,&len,&wid);
sum+=((long long)len*wid);
a[i].len=len,a[i].wid=wid,a[i].p1=make_pair(x,y),a[i].cal();
}
sort(a+,a++n,cmp);
printf("%d\n",binary_search(r,sum));
}
return ;
}

hiho1249 Xiongnu's Land的更多相关文章

  1. UVALive 7261 Xiongnu's Land (扫描线)

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  2. (UVALive 7261)Xiongnu's Land 二分

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

  3. 2015北京区域赛 Xiongnu's Land

    Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the ...

  4. 二分+贪心 hihocoder 1249 Xiongnu's Land (15北京A)

    题目传送门 题意:有多个矩形分布在[0, 0]到[R, R]的的范围内,画一条竖线分割成两块矩形,使得左边包括矩形的面积大于等于右边的面积,在这个前提下使得画的竖线尽量远 分析:二分答案,当面积相等时 ...

  5. 【hihocoder 1249 Xiongnu's Land】线性扫描

    2015区域赛北京赛区的三水,当时在赛场上没做出的原因是复杂度分析不正确导致把方法想复杂了.近来复习复杂度分析,觉得不能只是笼统地看渐进复杂度(big-O),更应根据算法的伪码计算真正的以基本操作数为 ...

  6. [ An Ac a Day ^_^ ] HihoCoder 1249 Xiongnu's Land 线性扫描

    拿到了icpc北京站的参赛名额 感谢亮哥~ 虽然是地狱之战 但也要全力以赴! 题意: 有一片沙漠 n片绿洲 让你用一条线分成两部分 左≥右 而且分割线要尽量靠右 问线的位置 思路: 网上说可以二分 没 ...

  7. UVALive - 7261 Xiongnu's Land

    思路: 先二分下界,再二分上届. #include <bits/stdc++.h> using namespace std; #define MP make_pair #define PB ...

  8. POJ 1365 Prime Land(数论)

    题目链接: 传送门 Prime Land Time Limit: 1000MS     Memory Limit: 10000K Description Everybody in the Prime ...

  9. [2015hdu多校联赛补题]hdu5378 Leader in Tree Land

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:给你一棵n个结点的有根树.因为是有根树,那么每个结点可以指定以它为根的子树(后面讨论的子树 ...

随机推荐

  1. heb Daz

    Asatras soi bib Daz! gos la haik ri, dewoa gos mi haik quri. soi Fong d cuup va ti Chusan, imps Dabo ...

  2. Choosing The Commander CodeForces - 817E (01字典树+思维)

    As you might remember from the previous round, Vova is currently playing a strategic game known as R ...

  3. PS 制作彩色烟雾

  4. shell脚本--CGI获取请求数据(GET / POST)

    Case 1: 获取地址栏传递的参数(即通过GET方式) CGI的环境变量中有个QUERY_STRING,可以获取地址栏传递的参数,该参数可以是手动加上的,也可以是通过表单的get方式提交的,比如下面 ...

  5. js 翻牌活动效果

    直接上代码 html: <div class="index_main"> <ul class="index_card"> <li ...

  6. ssh登录

    ssh 用户名@IP地址 -p 端口号 ssh root@127.0.0.1 -p 2222

  7. array_filter与array_map

    php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,functio ...

  8. SQLSERVER sa 用户密码修改的方法

    本次驱动人生病毒的收获 . 偷懒总会有报应. . 应用(数据库或者是web应用nginx等.)都不要使用最高级别权限用户来使用 虽然这样的环境问题最少. . 密码还是需要定期更换的,虽然有成本,但是也 ...

  9. CMake--模块的使用和自定义模块

    1.链接外部库 如果程序中使用了外部库,事先并不知道它的头文件和链接库的位置,就要给出头文件和链接库的查找方法,并将他们链接到程序中. FIND_PACKAGE(<name> [major ...

  10. 将表单数据转换为json代码分享

    <body> <form action="#" method="post" id="form1"> <inpu ...