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! 首先熟练的转化求不被这个图形包含的个数 -- ...
随机推荐
- B-Boxes
http://agc010.contest.atcoder.jp/tasks/agc010_b Problem Statement There are N boxes arranged in a ci ...
- ConEmu windows上的终端工具
ConEmu Windows terminal 官网: http://conemu.github.io/
- python IO编程-序列化
原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192607 ...
- 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(二分写法)
[题目链接]:http://codeforces.com/contest/822/problem/C [题意] 有n个旅行计划, 每个旅行计划以开始日期li,结束日期ri,以及花费金钱costi描述; ...
- hdu 4707 Pet【BFS求树的深度】
Pet Time Limit: 4000/2000 MS (Java/Others) ...
- PHP经常使用功能
1)字符串 主要方法有:strops().substr().str_split().explode()等.很多其它方法查看PHP官方手冊. <?php /** * 字符串的方法:strpos() ...
- p2p項目夭折,有種蛋蛋的憂傷。。
在高考完的暑假就在跟杰哥讨论怎样实现的校内p2p文件共享,就在今天.我们无奈的宣布差点儿夭折. 上图是測试图. 那时候的思路已经完好.就是:"学生上传共享文件到咱们工作室的server. ...
- Codeforces--602A--Two Bases(水)
Two Bases Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit St ...
- avalon 笔记---Mr.wing
Avalon笔记步骤一:引用js文件<script src="js/avalon.js"></script>步骤二:<script> var v ...
- 14.c语言dll注入
#include <Windows.h> //dll不需要main函数 //导出接口 _declspec(dllexport) void go() { MessageBoxA(, ); }