Day2 ---二分

这里直接给出模板

两种对应不同的情况 可以借助数轴理解

int bsearch_1(int l, int r) {
while (l < r) {
int mid = l + r >> ;
if (check(mid)) r = mid;
else l = mid + ;
}
return l;
} int bsearch_2(int l, int r) {
while (l < r) {
int mid = l + r + >> ;
if (check(mid)) l = mid;
else r = mid - ;
}
return l;
}

补充:有时候可以借助STL的std::lower_bound()来找第一个大于等于你的值的数,std::upper_bound()来找第一个大于数所在的位置

P1873 砍树

int a[];
int n, m;
bool check(int k) { //检查可行性,k为锯片高度
long long sum = ;
for (int i = ; i <= n; i++) //检查每一棵树
if (a[i] > k) //如果树高于锯片高度
sum += (long long)(a[i] - k); //累加树木长度
return sum >= m; //如果满足最少长度代表可行
}
int find(int x) {
int l = , r = ; //因为是左闭右开的,所以10亿要加1
while (l + < r) { //如果两点不相邻
int mid = (l + r) / ; //取中间值
if (check(mid)) //如果可行
l = mid; //升高锯片高度
else
r = mid; //否则降低锯片高度
}
return l; //返回左边值
}
int main() {
cin >> n >> m;
for (int i = ; i <= n; i++) cin >> a[i];
cout << find(m);
return ;
}

实数二分 Pie http://poj.org/problem?id=3122

#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<queue>
#include<stack>
#include<sstream>
#include<cstdio>
const double eps = 1e-;
const int maxn = 1e6 + ;
const double PI = acos(-1.0);
typedef long long ll;
using namespace std;
double r[];
int n, k;
bool check(double x) {
int cnt = ;
for (int i = ; i < n; i++) {
cnt+= (int)(r[i] / x);
}
if (cnt >= k+) return true;
else return false;
} int main() {
std::ios::sync_with_stdio();
cin.tie();
double Max;
int T; cin >> T; while (T--) {
cin >> n >> k;
Max = -; for (int i = ; i < n; i++) {
cin >> r[i];
r[i]=r[i]*r[i]*PI;
Max = max(Max, r[i]);
}
double l = ;
double r = Max+;
while (r - l > eps) {
double mid = (l + r) / ;
if (check(mid)) {
l = mid;
}
else r = mid;
}
printf("%.4f\n", l ); }
return ;
}

注意精度

三分 

  主要用于求函数极值

double f(double a){/*根据题目意思计算*/}
double three(double l,double r) //找凸点
{
while(l<r-eps)
{
double mid=(l+r)/;
double mmid=(mid+r)/;
if(f(mid)>f(mmid)) r=mmid;
else l=mid;
}
if(f(l)>f(r)) return l;
else return r;
}

秦九韶算法从里到外逐层计算一次多项式

double    F(double x) {
double sum = ;
for (int i = n; i >= ; i--) {
sum = sum * x + a[i];
}
return sum;
}

HZNU-ACM寒假集训Day2小结 二分答案的更多相关文章

  1. 中南大学2019年ACM寒假集训前期训练题集(基础题)

    先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...

  2. 2022寒假集训day2

    day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...

  3. 中南大学2019年ACM寒假集训前期训练题集(入门题)

    A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...

  4. 【2018寒假集训 Day2】【动态规划】维修栅栏

    维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...

  5. 【2018寒假集训 Day2】【动态规划】挖地雷

    挖地雷(Mine) 在一个地图上有N 个地窖(N<=200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且从编号小的地窖通向编号大的地窖.某人可以从任一处 ...

  6. HZNU-ACM寒假集训Day12小结 数论入门 题解

    算不出的等式 BJOI2012 看到这题 真没什么办法 无奈看题解 1.注意到p/q 联想到斜率 2.注意到 [ ] 联想到整点 注意到k在变化,构造一次函数 f(x)=p/q*x ,g(x)=q/p ...

  7. HZNU-ACM寒假集训Day8小结 最小生成树

    最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络   https://www.luogu.com.cn/problem/P1546 #i ...

  8. HZNU-ACM寒假集训Day6小结 线性DP

    线性DP 考虑一组硬币面值 1,5,11 给定W,求凑出W的最少硬币个数 我们记凑出n需要用到的最少硬币数量为f(n)   我们注意到了一个很棒的性质 : f(n)只与f(n-1) f(n-5) f( ...

  9. HZNU-ACM寒假集训Day3小结 搜索

    简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...

随机推荐

  1. jumpserver手动配置文档

    1.环境  centos7.6   硬盘 200G  cpu  8核心  内存 32G (本地测试的时候,有报错,原因为虚拟机配置不够,此时为在pve虚拟化上面做的linux系统) 2.https:/ ...

  2. mysql 索引优化法则

    建表语句 CREATE TABLE staffs( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR (24) NOT NULL DEFAULT '' C ...

  3. Python @函数装饰器及用法

    1.函数装饰器的工作原理 函数装饰器的工作原理是怎样的呢?假设用 funA() 函数装饰器去装饰 funB() 函数,如下所示: #funA 作为装饰器函数 def funA(fn): #... fn ...

  4. vld扩展

    PHP代码的执行实际上是在执行代码解析后的各种opcode.通过vld扩展可以很方便地看到执行过程中的opcode. 一.安装vld扩展 git clone https://github.com/de ...

  5. Rabbitmq与spring整合之重要组件介绍——rabbitAdmin组件

    rabbitAdmin组件是一个管理组件,主要是用户通过该组件进行rabbitmq的队列交换器虚拟主机等等进行操作.这里面有些教程说不用声明可以直接绑定,但是本博主运行时,不生命情况下就会报错,可能是 ...

  6. 动态设置html根字体大小(随着设备屏幕的大小而变化,从而实现响应式)

    代码如下:如果设置了根字体大小,font-size必须是rem var html =document.querySelector('html'); html.style.fontSize = docu ...

  7. GoJS API学习

    var node = {}; node["key"] = "节点Key"; node["loc"] = "0 0";// ...

  8. GoJS实例1

    复制如下内容保存到空白的.html文件中,用浏览器打开即可查看效果 <!DOCTYPE html> <html> <head> <meta charset=& ...

  9. R 《回归分析与线性统计模型》page93.6

    rm(list = ls()) #数据处理 library(openxlsx) library(car) library(lmtest) data = read.xlsx("xiti4.xl ...

  10. 二进制中1的个数(n=(n&n-1))

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题:利用Java系统提供的函数Integer.toBinaryString(n),将整数转化为二进制,之后再将二进制的0用 ...