【BZOJ4101】[Usaco2015 Open]Trapped in the Haybales Silver 二分
【BZOJ4101】[Usaco2015 Open]Trapped in the Haybales (Silver)
Description
Input
Output
Sample Input
8 1
1 4
3 8
12 15
20 20
Sample Output
题解:当我又一次看到了这道熟悉的题,想起了几年前狂WA不止的恐惧,我屏住呼吸,再一次点开了这道题目,就在这时,我突然震惊的发现——
我TM看错题了!!!
好吧,这题说的是只能增大一个干草堆的大小,我以前一直认为是多个(也就是两个),并且还真的写出来了一种算法,拍极限数据都没问题!!
进入正题:
先讨论增大Bessie左边的干草堆的情况,我们枚举右边的干草堆j,设增大的大小为k,加高的干草堆编号为i,干草堆大小size,干草堆坐标x,容易列出方程

也就是size[i]+x[i]越大越好,前提x[i]不能太小
于是我们先处理一下size[i]+x[i]的最大值,然后二分x[i],然后更新答案就行了
增大Bessie右边的干草堆的情况也类似
#include <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <algorithm>
using namespace std;
const int maxn=100010;
int n,m,ans;
struct bale
{
int x,d;
}s[maxn];
int f[maxn];
set<int> s1,s2;
bool cmp(bale a,bale b)
{
return a.x<b.x;
}
int main()
{
scanf("%d%d",&n,&m);
ans=1<<30;
int i,j,l,r,mid;
for(i=1;i<=n;i++) scanf("%d%d",&s[i].d,&s[i].x);
s[++n].x=m;
sort(s+1,s+n+1,cmp);
for(i=1;i<=n;i++) if(s[i].x==m)
{
m=i;
break;
}
f[m]=-1<<30;
for(i=m-1;i>=1;i--) f[i]=max(f[i+1],s[i].x+s[i].d);
for(i=m+1;i<=n;i++) f[i]=max(f[i-1],s[i].d-s[i].x);
for(i=m+1;i<=n;i++)
{
l=1,r=m;
while(l<r)
{
mid=l+r>>1;
if(s[i].x-s[mid].x<=s[i].d) r=mid;
else l=mid+1;
}
if(r<m) ans=min(ans,max(0,s[i].x-f[r]));
}
for(i=1;i<m;i++)
{
l=m+1,r=n+1;
while(l<r)
{
mid=l+r>>1;
if(s[mid].x-s[i].x<=s[i].d) l=mid+1;
else r=mid;
}
if(l>m+1) ans=min(ans,max(0,-s[i].x-f[l-1]));
}
if(ans==1<<30) printf("-1");
else printf("%d",ans);
return 0;
}
【BZOJ4101】[Usaco2015 Open]Trapped in the Haybales Silver 二分的更多相关文章
- 【BZOJ4099】Trapped in the Haybales Gold STL
[BZOJ4099]Trapped in the Haybales Gold Description Farmer John has received a shipment of N large ha ...
- 【bzoj3886】[Usaco2015 Jan]Moovie Mooving 状态压缩dp+二分
题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from Farmer J ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- SDWC补题计划
2018的寒假去了SD的冬令营,因为一班二班难度悬殊,对我很不友好,几乎什么也没学会,但是我把两个班的课件都存了下来,现在慢慢把两个班的例题以及课后题都补一补(毕竟冬令营的钱不能白花). 这些题目横跨 ...
- POJ 3662
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4591 Accepted: 1693 D ...
- POJ 3273
Monthly Expense Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12122 Accepted: 4932 ...
- poj 3662 Telephone Lines(好题!!!二分搜索+dijkstra)
Description Farmer John wants to set up a telephone line at his farm. Unfortunately, the phone compa ...
- BZOJ——1620: [Usaco2008 Nov]Time Management 时间管理
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 920 Solved: 569[Submit][Status][Discuss] Description ...
随机推荐
- 轻量级ORM框架Dapper应用四:使用Dapper返回多个结果集
使用Dapper的QueryMultiple方法可以一次执行多条SQL语句,返回多个结果集,代码如下 using System; using System.Collections.Generic; u ...
- 可能是目前最完整的前端框架 Vue.js 全面介绍
Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架. 摘要 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angul ...
- 从my里调出数据插入到ms2008 骨架 php
<?php $server ="XEJMZWMDIXE9CIJ";//ms,服务器IP地址,如果是本地,可以写成localhost $uid =""; / ...
- selenium测试(Java)--截图(十九)
package com.test.screenshot; import java.io.File; import java.io.IOException; import org.apache.comm ...
- 最大割(Maximum cut)
问题描述:把图中点分为两部分V1和V2,使得V1和V2之间的连边值最大.
- imx6 ar8031 千兆网卡不能用
/*************************************************************************** * imx6 ar8031 千兆网卡不能用 * ...
- Intellij IDEA 使用学习
Intellij中名词解释: Project,就是一个完整的项目,类似Eclipse中的WorkSet(虽然WorkSet是人为归类的). Module,是Project中的模块,类似Eclipse中 ...
- H.264:FFMpeg 实现简单的播放器
H.264:FFMpeg 实现简单的播放器 FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手.我刚接触FFMPEG的时候也感觉不知从何学起. 因此我 ...
- (转)非阻塞Connect对于select时应注意问题
对于面向连接的socket类型(SOCK_STREAM,SOCK_SEQPACKET)在读写数据之前必须建立连接,首先服务器端socket必须在一个客户端知道的地址进行监听,也就是创建socket之后 ...
- Linux远程连接Windows桌面
Ubuntu对初始用户的界面友好是有目共睹的:Fedora一向以创新.傲慢的姿态示人.其实,对于两者,我虽然更倾向于选择Fedora,但不可避免地会两者比较,发现Ubuntu更加人性化,这点是经过很多 ...