UOJ #357. 【JOI2017春季合宿】Sparklers
Description
小S和小M去看花火大会。
一共有 n 个人按顺序排成一排,每个人手上有一个仅能被点燃一次的烟花。最开始时第 K 个人手上的烟花是点燃的。
烟花最多能燃烧 T 时间。每当两个人的位置重叠且其中一个人手上的烟花是点燃的时,另一个人手上的烟花可以被点燃。
现在小M想要知道,每个人至少需要以多快的速度 s 奔跑,才能使得每个人手中的烟花都能被点燃。
可怜的小M当然不会啦,所以她向你求助。
Solution
首先二分答案,算出一个人点燃烟花后最多可以走的距离 \(s\)
要猜一个结论:\([i,j]\) 个人传递完之后 , 这个时刻一个刚刚被点燃烟花的人 \(j\) 可以在的位置是一个区间
设 \(L_{i,j}\) 表示第 \([i,j]\) 个人传递完之后 , 这个时刻一个刚刚被点燃烟花的人 \(i\) 可以在的位置的最小值
\(R_{i,j}\) 表示第 \([i,j]\) 个人传递完之后 , 这个时刻一个刚刚被点燃烟花的人 \(j\) 可以在的位置的最大值
枚举 \(k=i-1,j+1\) 来转移
得到新的区间: \([L_{i,j}-s,R_{i,j}+s]∩[x_k-(i-j+1)*s,x_k+(i-j+1)*s]\)
要使这个区间不为空,那么:


贪心的把左右端点往两边移动:
如果左端点可以在不小于右端点权值的情况下移动到更大的值,则移动过去,右端点同理
一个点被经过的次数似乎是 \(2\) 次
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
template<class T>void gi(T &x){
int f;char c;
for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1;
for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f;
}
typedef long long ll;
int n,T,K,x[N];ll a[N];
inline bool check(int s){
for(int i=1;i<=n;i++)a[i]=x[i]-2ll*i*s;
if(a[1]<a[n])return 0;
int l,r,L=K,R=K,tl=K,tr=K;
for(int i=K;i>=1;i--)if(a[i]>=a[L])L=i;
for(int i=K;i<=n;i++)if(a[i]<=a[R])R=i;
for(l=r=K;;){
for(;tl>L&&a[tl-1]>=a[r];)if(a[--tl]>=a[l])break;
for(;tr<R&&a[tr+1]<=a[l];)if(a[++tr]<=a[r])break;
if(a[tl]<a[l])tl=l;if(a[tr]>a[r])tr=r;
if(l==tl && r==tr)break;
l=tl;r=tr;
}
if(l!=L||r!=R)return 0;
for(tl=l=1,tr=r=n;;){
for(;tl<L&&a[tl+1]>=a[r];)if(a[++tl]>=a[l])break;
for(;tr>R&&a[tr-1]<=a[l];)if(a[--tr]<=a[r])break;
if(a[tl]<a[l])tl=l;if(a[tr]>a[r])tr=r;
if(l==tl && r==tr)break;
l=tl;r=tr;
}
return l==L&&r==R;
}
int main(){
freopen("fireworks.in","r",stdin);
freopen("fireworks.out","w",stdout);
cin>>n>>K>>T;
for(int i=1;i<=n;i++)gi(x[i]);
int l=0,r=x[n]-x[1],mid,ret=0;
while(l<=r){
mid=(l+r)>>1;
if(check(mid))ret=mid,r=mid-1;
else l=mid+1;
}
cout<<(ret+T-1)/T;
return 0;
}
UOJ #357. 【JOI2017春季合宿】Sparklers的更多相关文章
- UOJ #356. 【JOI2017春季合宿】Port Facility
Description 小M有两个本质不同的栈. 无聊的小M找来了n个玩具.之后小M把这n个玩具随机顺序加入某一个栈或把他们弹出. 现在小M告诉你每个玩具的入栈和出栈时间,现在她想考考小S,有多少种方 ...
- 【JOI2017春季合宿】Port Facility
http://uoj.ac/problem/356 题解 思路和\(NOIP\)双栈排序差不多. 对于两个元素,若\(l_1<l_2<r_1<r_2\)那么它们不能在一个栈里,我们连 ...
- UOJ356 [JOI2017春季合宿] Port Facility 【启发式合并】【堆】【并查集】
题目分析: 好像跑得很快,似乎我是第一个启发式合并的. 把玩具看成区间.首先很显然如果有两个玩具的进出时间有$l1<l2<r1<r2$的关系,那么这两个玩具一定在不同的栈中间. 现在 ...
- [JOI2017春季合宿]Port Facility[set、二分图]
题意 你有两个栈,有 \(n\) 个货物,每个货物有一个进栈时间和出栈时间(所有时间的并集是1~2n),问有多少种不同的入栈方案. \(n\le 10^6\) 分析 把每个货物的存在看成区间,相交的区 ...
- JOI2017 春季合宿:Railway Trip
自己的AC做法似乎离正解偏了十万八千里而且复杂了不少--不管怎样还是记录下来吧. 题意: 题目链接: JOISC2017 F - AtCoder JOISC2017 F - LOJ \(N\)个车站排 ...
- UOJ356 【JOI2017春季合宿】Port Facility
暴力就是O(n^2)连边,二分图,这样只有22分. 我们考虑优化建边,我们按照左端点排序,对于一个新加进来的线段,我们向左端点距其最近的和他相交的线段连边,别的相交的我们连同色边,当一个点连了两条同色 ...
- BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4388 题解 模拟Prim算法? 原题所述的过程就是Prim算法求最大生成树的过程.于是我 ...
- BZOJ 4221 [JOI2012春季合宿]Kangaroo (DP)
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4221 题解 orz WYC 爆切神仙DP 首先将所有袋鼠按大小排序.考虑从前往后DP, ...
- LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)
题目链接 https://loj.ac/problem/2731 题解 首先一个很自然的思路是,设\(dp[i][j]\)表示选了前\(i\)列,第\(2\)行第\(i\)列的格子是第\(j\)个被填 ...
随机推荐
- 使用ABP框架踩过的坑系列2
ABP中有很多惯例,如果使用得当,可以事半功倍,如果使用不当,也会有很大的麻烦,是否适当其实还是要看Need需求 ASP.NET Boilerplate (ABP) is an open source ...
- Eclipse设置代理
Windows->Preferences->General->Network Connections下面可以设置代理 如果要指定特定的代理地址,需要把类型改为Manual 通常htt ...
- js:实现自定义事件对象接口
网易2017内推笔试题 要求: 请实现下面的自定义事件Event对象的接口,功能见注释(测试1) 该Event对象的接口需要能被其他对象拓展复用(测试2) //测试1 Event.on('test', ...
- Day 28面向对象的进阶-内置函数(__new__,__del__)
元类 创造 类 所有类的type 都是他的元类 类创造 对象 具体创造对象的方法 __new__方法 class 类名(classmata = type)#默认是 class 类名(class ...
- python 中 使用sys模块 获取运行脚本时在命令行输入的参数
在python项目的开发的过程中, 经常需要运行各种python脚本, 有时候还需要根据不同的使用情况输入不同的参数, 如果每次都去编辑一下脚本那就太麻烦,太耗费时间了, 这时就可以使用Python自 ...
- webpack快速入门——集中拷贝静态资源
工作中会有一些已经存在但在项目中没有引用的图片资源或者其他静态资源(比如设计图.开发文档), 这些静态资源有可能是文档,也有可能是一些额外的图片.项目组长会要求你打包时保留这些静态资源, 直接打包到制 ...
- 克隆linux虚拟机
背景:有时候,我们在用虚拟机的时候会用到多个进行使用.重新安装会花费大量的时间,此时,我们可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统. 前提:被克隆的虚拟机系统要处于关闭状态 步骤: ...
- Memcached 查看列出所有key方法
Memcached没有一个比较简单的方法可以直接象Redis那样keys *列出所有的Session key,并根据key get对应的session内容,但是还是可以查看的 memcached 查看 ...
- 用Python玩转数据第六周——高级数据处理与可视化
1.matplotlib中有两个模块,pyplot和pylab import matplotlib.pyplot as plt ///plt.plot(x,y) import pylab as pl ...
- Ant运行build.xml执行服务器scp,异常解决jsch.jar
公司ant打包上线 一直出现这个问题. Ant运行build.xml执行服务器scp,异常解决jsch.jar BUILD FAILEDD:\eclipse\eclipse-jee-luna-SR2- ...