贪心方案:

答案是第三个策略

二分的一个重点是有顺序性,只有满足这个件才可以二分判断区间,否则你得自己构造顺序。

洛谷跳石头同题:

首先,我们要最小化最大跳远距离

代码如下(此题)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4.  
  5. #define N 300005
  6.  
  7. using namespace std;
  8.  
  9. int i,j,m,n,p,k,a[N],x;//r为right,l为left
  10.  
  11. int check(int x)//判断mid是否符合条件
  12. {
  13. int i,cnt=;
  14. for (i=;i<=n;++i) if (a[i]-a[i-]>x) return ;//x过小,直接右边查找
  15. for (i=;i<n;)
  16. {
  17. for (j=i;j<=n&&a[j]-a[i]<=x;++j);//处理a数组,使判断时改为石头间距离
  18. ++cnt;//计数器加一
  19. i=j-;//删除这个点
  20. }
  21. if (cnt<=m) return ;
  22. return ;
  23. }
  24.  
  25. int main()
  26. {
  27. scanf("%d%d",&n,&m);
  28. for (i=;i<=n;++i) scanf("%d",&a[i]);
  29. sort(a+,a+n+);//从小到大排序石头距离
  30. int l=,r=(int)1e9,mid=;//数据范围没给,直接定义1e9(反正log1e9也不是很大)
  31. while ((l+r)>>!=mid)//如果头尾平均数不等于上一次循环的mid(不能再分了,间隔为1时结束循环)
  32. {
  33. mid=(l+r)>>;//二分灵魂
  34. if (check(mid)) r=mid;//返回值为1,就是大了;返回值为0,就是小了
  35. else l=mid;//返回值为0的话,就取右半边
  36. }
  37. printf("%d\n",r);
  38. }

看起来很像贪心是不是?

然而贪心是错的。QWQ

三分:能对单峰函数求峰值

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4.  
  5. #define N 500005
  6.  
  7. using namespace std;
  8.  
  9. int i,j,m,n,p,k,a[N],ty,x;
  10.  
  11. long long b[N];
  12.  
  13. double check(int x)
  14. {
  15. return .*(b[x-]+a[n])/x;
  16. }
  17.  
  18. int main()
  19. {
  20. scanf("%d",&m);
  21. for (;m--;)
  22. {
  23. scanf("%d",&ty);
  24. if (ty==)
  25. {
  26. scanf("%d",&x);
  27. a[++n]=x;
  28. b[n]=b[n-]+x;
  29. }
  30. else
  31. {
  32. int l=,r=n;
  33. while (r-l>)
  34. {
  35. int len=(r-l+)/,mid1=l+len,mid2=mid1+len;
  36. if (check(mid1)<check(mid2)) r=mid2;
  37. else l=mid1;
  38. }
  39. double ans=;
  40. for (i=l;i<=r;++i) ans=max(ans,a[n]-check(i));
  41. printf("%.10lf\n",ans);
  42. }
  43. }
  44. }

然后;老师开始了分治。

第一题:快速幂

我直接连接我的博客(因为讲的是重复的内容)

https://www.cnblogs.com/lbssxz/p/10656598.html

我这个是取模的运算,你要黈的话去了就行

然后是:

你会发现,红点和中心的那三个黑点是等价的,都不能分。

北京大学冯哲清北学堂讲课day1的更多相关文章

  1. 8月清北学堂培训 Day1

    今天是赵和旭老师的讲授~ 动态规划 动态规划的基本思想 利用最优化原理把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解. 更具体的,假设我们可以计算出小问题的最优解,那么我们凭借此可 ...

  2. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  3. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

  4. 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)

    清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...

  5. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  6. 7月清北学堂培训 Day 3

    今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...

  7. 五一培训 清北学堂 DAY1

    今天是冯哲老师的讲授~ 1.枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些是有用的.能使命题成立的即为其解. 例一一棵苹果树上有n ...

  8. 清北学堂2019NOIP提高储备营DAY1

    今天是第二次培训的第一天,关于NOIP的基础算法,主要内容如下: $1.枚举 $2.搜索 $3.贪心 $1.枚举: •定义: 枚举又叫做穷举,是一种基础的算法,其思路主要是:从问题中有可能的解集中一一 ...

  9. 五一培训 清北学堂 DAY2

    今天还是冯哲老师的讲授~~ 今日内容:简单数据结构(没看出来简单qaq) 1.搜索二叉树 前置技能 一道入门题在初学OI的时候,总会遇到这么一道题.给出N次操作,每次加入一个数,或者询问当前所有数的最 ...

随机推荐

  1. 知识科普:IM聊天应用是如何将消息发送给对方的?(非技术篇)

    1.引言 沟通是人类的最基本需求,复杂多变的沟通内容.沟通方式,正是人类文明之所以如此璀璨的关键所在.   在自然界中,要完成一件事情的沟通,我们可以直接通过声音传递给对方,这是再平常不过的事了(靠“ ...

  2. 搭建微服务器:express+https+api代理

    概述 最近打算玩一下service worker,但是service worker只能在https下跑,所以查资料自己用纯express搭建了一个微服务器,把过程记录下来,供以后开发时参考,相信对其他 ...

  3. Spring Cloud Eureka 你还在让它裸奔吗??

    前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版 ...

  4. Python + PyQt5 实现美剧爬虫可视工具

    美剧<权力的游戏>终于要开播最后一季了,作为马丁老爷子的忠实粉丝,为了能够看得懂第八季复杂庞大的剧情架构,本人想着将前几季再稳固一下,所以就上美剧天堂下载来看,可是每次都上去下载太麻烦了, ...

  5. 【Android Studio安装部署系列】四、Android SDK目录和作用分析

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android SDk Tool软件开发工具包(software development kit).被软件开发工程师用于为特定的软件 ...

  6. Java进阶篇设计模式之三 ----- 建造者模式和原型模式

    前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...

  7. 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. Docker最全教程之Ubuntu下安装Docker(十四)

    前言 Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,应用很广.本篇主要讲述Ubuntu下使用SSH远程登录并安装Docker,并且提供了Docker安装的两种方式,希望对大家有所帮 ...

  9. 部署ionic开发环境

    (1)安装Node.js 首先您需要安装 Node.js,后续会使用到其中的 NPM 工具. (2)安装JDK 需要安装JDK,官网下载安装.命令窗口中输入 java -Xmx2048m -versi ...

  10. 根据点击事件去选取电脑中.rvt文件

    private void button_Click(object sender, RoutedEventArgs e) { //这个选出来是文件夹 //选择文件 var openFileDialog ...