JOISC 2017 Day1 T3 烟花棒
JOISC 2017 Day1 T3 烟花棒
题意:
数轴上有\(N\)人在放烟花,一开始只有第\(K\)个人的烟花是点燃的,烟花燃烧的时间为\(T\)秒,求让所有人的烟花都可以点燃的速度的最小值。(\(N\leq1e5,T\leq1e9\))。
题解:
好难啊。。。。
肯定是二分答案,现在问题转化为能否覆盖整个区间。一个很显然的结论:如果\([i,j]\)都可以点燃,则满足\(x_j+VT(j-i)\geq x_i-VT(j-i)\)。令\(a[i]=x_i-2VT*i\),则\(a[i]\geq a[j]\)。
现在要求的就是可不可以从\([k,k]\)走到\([1,n]\),贪心即解决。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define of(i,l,r) for(int i=l;i>=r;i--)
#define fe(i,u) for(int i=head[u];i;i=e[i].next)
using namespace std;
typedef long long ll;
inline void open(const char *s)
{
#ifndef ONLINE_JUDGE
char str[20];
sprintf(str,"%s.in",s);
freopen(str,"r",stdin);
// sprintf(str,"%s.out",s);
// freopen(str,"w",stdout);
#endif
}
inline int rd()
{
static int x,f;
x=0;f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return f>0?x:-x;
}
const int N=100010;
int n,K,T,x[N];
ll a[N];
inline bool gao(int V)
{
fo(i,1,n)a[i]=x[i]-2ll*T*V*i;
if(a[1]<a[n])return 0;
int ql=K,qr=K,l,r;
of(i,K-1,1)if(a[i]>=a[ql])ql=i;
fo(i,K+1,n)if(a[i]<=a[qr])qr=i;
l=r=K;
while(l!=ql||r!=qr){
bool hh=0;
int L=l,R=r;
while(L>ql&&a[L-1]>=a[r])if(a[--L]>=a[l])break;
if(L<l&&a[L]>=a[l])hh=1,l=L;
while(R<qr&&a[R+1]<=a[l])if(a[++R]<=a[r])break;
if(R>r&&a[R]<=a[r])hh=1,r=R;
if(!hh)return 0;
}
l=1;r=n;
while(l!=ql||r!=qr){
bool hh=0;
int L=l,R=r;
while(L<ql&&a[L+1]>=a[r])if(a[++L]>=a[l])break;
if(L>l&&a[L]>=a[l])hh=1,l=L;
while(R>qr&&a[R-1]<=a[l])if(a[--R]<=a[r])break;
if(R<r&&a[R]<=a[r])hh=1,r=R;
if(!hh)return 0;
}
return 1;
}
int main()
{
n=rd();K=rd();T=rd();
fo(i,1,n)x[i]=rd();
int l=0,r=1000000000,mid,ans=r;
while(l<=r){
mid=(l+r)>>1;
if(gao(mid))ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}
JOISC 2017 Day1 T3 烟花棒的更多相关文章
- JOISC 2017
Day1 「JOISC 2017 Day 1」开荒者 首先观察部分分发现分档很多,于是考虑一步步思考上来. 首先有一点关键观察(一): 风吹的顺序是无所谓的,令分别往东.西.南.北吹了 \(r, l, ...
- 【NOIP2016】Day1 T3 换教室(期望DP)
题目背景 NOIP2016 提高组 Day1 T3 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上. ...
- 「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
- [LOJ 6031]「雅礼集训 2017 Day1」字符串
[LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...
- [LOJ 6030]「雅礼集训 2017 Day1」矩阵
[LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...
- [LOJ 6029]「雅礼集训 2017 Day1」市场
[LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...
- 【LOJ】#3032. 「JOISC 2019 Day1」馕
LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...
- 【LOJ】#3031. 「JOISC 2019 Day1」聚会
LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链 ...
- 【LOJ】#3030. 「JOISC 2019 Day1」考试
LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...
随机推荐
- PHP安装curl扩展
昨天在写文章的时候,突然出现了一个很顽皮的bug. 一直跳到404页面??? 于是我赶紧打开debug,看看什么情况! 弹出的错误是 :Call to undefined function Home\ ...
- JS获取当前时间(YYYY-MM-DD ),element显示默认当前时间,显示默认昨天,显示默认上个月
原文链接:点我 进来的随便看看,或许有帮助 vue+element-ui datepicker 设置默认日期用的框架是vue+element-ui ,以下是时间控件 <el-form-ite ...
- PostgreSQL创建只读用户
创建用户及指定密码: CREATE USER readonly WITH ENCRYPTED PASSWORD 'ropass'; 设置用户默认事务只读: alter user readonly se ...
- 关于FAT32分区的U盘4GB文件的测试
关于FAT32分区的U盘4GB文件的测试 很多人都知道FAT32的分区,单文件大小不能超过4GB,关于这个问题就来测测看. FAT32最大文件大小为2的32次方,也就是4294967296 Byte, ...
- 紫书 例题 10-26 UVa 11440(欧拉函数+数论)
这里用到了一些数论知识 首先素因子都大于M等价与M! 互质 然后又因为当k与M!互质且k>M!时当且仅当k mod M! 与M!互质(欧几里得算法的原理) 又因为N>=M, 所以N!为M! ...
- Android studio树形
原创作品,允许转载,转载时请务必声明作者信息和本声明. http://www.cnblogs.com/zhu520/p/8349553.html 这个是上网找了好久才弄出来的,我把我上网找的总结也写 ...
- java关闭资源,自制关闭资源工具类
在网上看到一篇关于关闭资源的正确方式:http://blog.csdn.net/bornforit/article/details/6896775 该博文中的总结: (1)使用finally块来关闭物 ...
- Swift:UIKit中Demo(一)
关于Swift的基本概念及语法知识.我在前面的章节中已经介绍了非常多.这一节和下一节主要有针对性的解说Swift在实际UIKit开发中的使用场景及注意点.先来看看Demo的终于效果图. Demo分析: ...
- 多校第十场1009 CRB and String题解
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5414 题意:给你两个字符串s和t,你能够在字符串s中随意选一个字符c,在该字符c后插入一个字符d(d! ...
- Effective C++ 条款13
以对象管理资源 资源的种类非常多,动态分配的内存.文件描写叙述器.相互排斥锁.图像界面中画刷.数据库连接.网络socket等. 资源通常是有限的.当你不用时,必须释放.不然就会造成资源浪费.更严重的情 ...