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]\),贪心即解决。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #define fo(i,l,r) for(int i=l;i<=r;i++)
  6. #define of(i,l,r) for(int i=l;i>=r;i--)
  7. #define fe(i,u) for(int i=head[u];i;i=e[i].next)
  8. using namespace std;
  9. typedef long long ll;
  10. inline void open(const char *s)
  11. {
  12. #ifndef ONLINE_JUDGE
  13. char str[20];
  14. sprintf(str,"%s.in",s);
  15. freopen(str,"r",stdin);
  16. // sprintf(str,"%s.out",s);
  17. // freopen(str,"w",stdout);
  18. #endif
  19. }
  20. inline int rd()
  21. {
  22. static int x,f;
  23. x=0;f=1;
  24. char ch=getchar();
  25. for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
  26. for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
  27. return f>0?x:-x;
  28. }
  29. const int N=100010;
  30. int n,K,T,x[N];
  31. ll a[N];
  32. inline bool gao(int V)
  33. {
  34. fo(i,1,n)a[i]=x[i]-2ll*T*V*i;
  35. if(a[1]<a[n])return 0;
  36. int ql=K,qr=K,l,r;
  37. of(i,K-1,1)if(a[i]>=a[ql])ql=i;
  38. fo(i,K+1,n)if(a[i]<=a[qr])qr=i;
  39. l=r=K;
  40. while(l!=ql||r!=qr){
  41. bool hh=0;
  42. int L=l,R=r;
  43. while(L>ql&&a[L-1]>=a[r])if(a[--L]>=a[l])break;
  44. if(L<l&&a[L]>=a[l])hh=1,l=L;
  45. while(R<qr&&a[R+1]<=a[l])if(a[++R]<=a[r])break;
  46. if(R>r&&a[R]<=a[r])hh=1,r=R;
  47. if(!hh)return 0;
  48. }
  49. l=1;r=n;
  50. while(l!=ql||r!=qr){
  51. bool hh=0;
  52. int L=l,R=r;
  53. while(L<ql&&a[L+1]>=a[r])if(a[++L]>=a[l])break;
  54. if(L>l&&a[L]>=a[l])hh=1,l=L;
  55. while(R>qr&&a[R-1]<=a[l])if(a[--R]<=a[r])break;
  56. if(R<r&&a[R]<=a[r])hh=1,r=R;
  57. if(!hh)return 0;
  58. }
  59. return 1;
  60. }
  61. int main()
  62. {
  63. n=rd();K=rd();T=rd();
  64. fo(i,1,n)x[i]=rd();
  65. int l=0,r=1000000000,mid,ans=r;
  66. while(l<=r){
  67. mid=(l+r)>>1;
  68. if(gao(mid))ans=mid,r=mid-1;
  69. else l=mid+1;
  70. }
  71. printf("%d\n",ans);
  72. return 0;
  73. }

JOISC 2017 Day1 T3 烟花棒的更多相关文章

  1. JOISC 2017

    Day1 「JOISC 2017 Day 1」开荒者 首先观察部分分发现分档很多,于是考虑一步步思考上来. 首先有一点关键观察(一): 风吹的顺序是无所谓的,令分别往东.西.南.北吹了 \(r, l, ...

  2. 【NOIP2016】Day1 T3 换教室(期望DP)

    题目背景 NOIP2016 提高组 Day1 T3 题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n 节课程安排在 n 个时间段上. ...

  3. 「雅礼集训 2017 Day1」 解题报告

    「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...

  4. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  5. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  6. [LOJ 6029]「雅礼集训 2017 Day1」市场

    [LOJ 6029] 「雅礼集训 2017 Day1」市场 题意 给定一个长度为 \(n\) 的数列(从 \(0\) 开始标号), 要求执行 \(q\) 次操作, 每次操作为如下四种操作之一: 1 l ...

  7. 【LOJ】#3032. 「JOISC 2019 Day1」馕

    LOJ#3032. 「JOISC 2019 Day1」馕 处理出每个人把馕切成N段,每一段快乐度相同,我们选择第一个排在最前的人分给他的第一段,然后再在未选取的的人中选一个第二个排在最前的切一下,并把 ...

  8. 【LOJ】#3031. 「JOISC 2019 Day1」聚会

    LOJ#3031. 「JOISC 2019 Day1」聚会 听说随机可过? 我想了很久想了一个不会被卡的做法,建出前\(u - 1\)个点的虚树,然后找第\(u\)个点的插入位置,就是每次找一条最长链 ...

  9. 【LOJ】#3030. 「JOISC 2019 Day1」考试

    LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...

随机推荐

  1. SQL--CLR概述

    Visual Studio 2005  支持在 SQL Server 2005 中开发.部署和调试托管代码.有一种新的项目类型(称为 SQL Server 项目),它允许开发人员在 SQL Serve ...

  2. c# 结构 struct

    结构是使用 struct 关键字定义的,与类相似,都表示可以包含数据成员和函数成员的数据结构. 一般情况下,我们很少使用结构,而且很多人也并不建议使用结构,但作为.NET Framework 一般型別 ...

  3. tensorboard 使用

    TensorBoard是TensorFlow 的可视化工具.主要为了更方便用户理解 TensorFlow 程序.调试与优化,用户可以用 TensorBoard 来展现 TensorFlow 图像,绘制 ...

  4. js实现简易打点计时器

    很简单的实现一个打点计时器,规定从start至end,每次加1,每次打印间隔100ms,并且返回取消方法. 代码如下: //打点计时器,每间隔100毫秒+1 function count(start, ...

  5. 判断页面是否被嵌入iframe里面

    最近在做一个项目,是一个小型的后台管理系统,这个系统可以单独打开,也可以嵌入公司大型的后台管理项目里面 这样就存在一个问题,在被嵌入大的后台管理系统后,不用显示该页面顶部导航栏和左侧的菜单栏 所以我们 ...

  6. CF732F Tourist Reform(边双联通)

    题意 在一张有向图中,设 ri 为从点 i 出发能够到达的点的数量. 定义有向图的“改良值”为 ri 的最小值. 现给出一张无向图,要求给每条边定一个方向,使产生的有向图“改良值”最大. 输出 最大改 ...

  7. 【习题 8-20 UVA-1620】Lazy Susan

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 会发现,如果把连续4个数字进行一次翻转的话. 假设这连续的4个数字的逆序数为x; 那么翻转过后,逆序数就会变成6-x; (最多6个逆 ...

  8. ReactNative之Flux框架的使用

    概述 流程图 项目结构 View Components actions Dispatcher Stores 感谢 概述 React Native 能够说非常火,非常多bat的项目都在使用.不用发版就能 ...

  9. Lesson 2 Building your first web page: Part 2

    Tag Diagram You may have noticed that HTML tags come in pairs; HTML has both an opening tag (<tag ...

  10. 24. 在IDEA中使用JUnit进行方法测试

    转自:https://blog.csdn.net/smxjant/article/details/78206279 1. 前文 刚学习到的新技能,对JUnit的了解也还是皮毛程度,在这里做个笔记.如果 ...