HZNU-ACM寒假集训Day2小结 二分答案
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小结 二分答案的更多相关文章
- 中南大学2019年ACM寒假集训前期训练题集(基础题)
先写一部分,持续到更新完. A: 寒衣调 Description 男从戎,女守家.一夜,狼烟四起,男战死沙场.从此一道黄泉,两地离别.最后,女终于在等待中老去逝去.逝去的最后是换尽一生等到的相逢和团圆 ...
- 2022寒假集训day2
day1:学习seach和回溯,初步了解. day2:深度优化搜索 T1 洛谷P157:https://www.luogu.com.cn/problem/P1157 题目描述 排列与组合是常用的数学方 ...
- 中南大学2019年ACM寒假集训前期训练题集(入门题)
A: 漫无止境的八月 Description 又双叒叕开始漫无止境的八月了,阿虚突然问起长门在这些循环中团长哪几次扎起了马尾,他有多少次抓住了蝉等等问题,长门一共回复n个自然数,每个数均不超过1500 ...
- 【2018寒假集训 Day2】【动态规划】维修栅栏
维修栅栏 问题描述: 小z最近当上了农场主!不过,还没有来得及庆祝,一件棘手的问题就摆在了小z的面前.农场的栅栏,由于年久失修,出现了多处破损.栅栏是由n块木板组成的,每块木板可能已经损坏也可能没有损 ...
- 【2018寒假集训 Day2】【动态规划】挖地雷
挖地雷(Mine) 在一个地图上有N 个地窖(N<=200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且从编号小的地窖通向编号大的地窖.某人可以从任一处 ...
- HZNU-ACM寒假集训Day12小结 数论入门 题解
算不出的等式 BJOI2012 看到这题 真没什么办法 无奈看题解 1.注意到p/q 联想到斜率 2.注意到 [ ] 联想到整点 注意到k在变化,构造一次函数 f(x)=p/q*x ,g(x)=q/p ...
- HZNU-ACM寒假集训Day8小结 最小生成树
最小生成树(无向图) Kruskal 给所有边按从小到大排序 形成环则不选择(利用并查集) P1546 最短网络 https://www.luogu.com.cn/problem/P1546 #i ...
- HZNU-ACM寒假集训Day6小结 线性DP
线性DP 考虑一组硬币面值 1,5,11 给定W,求凑出W的最少硬币个数 我们记凑出n需要用到的最少硬币数量为f(n) 我们注意到了一个很棒的性质 : f(n)只与f(n-1) f(n-5) f( ...
- HZNU-ACM寒假集训Day3小结 搜索
简单搜索 1.DFS UVA 548 树 1.可以用数组方式实现二叉树,在申请结点时仍用“动态化静态”的思想,写newnode函数 2.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...
随机推荐
- 标准查询运算符---LINQ
Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输 ...
- gojs 部分功能实现
最近做的项目用到了gojs,使用了一段时间发现其功能特别强大,先记录下目前自己用到的把 1. 初始化画布 myDiagram = $(go.Diagram, "myDiagramDiv&qu ...
- git杂碎汇总
1. .gitignore文件使用 1.如果不想某类文件(编译后.配置等文件)加入到git版本管理,可以在这个文件中配置规则,进行过滤筛选: 2.配置规则 以斜杠"/"表示目录:e ...
- 047、Java中使用if…else if…else判断
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- Scala match 变量
昨天写 Scala 的时候,使用 match(相当于 switch)时,运行结果很奇怪. var i: Int = 0 while (i < items.length) { i % width ...
- Golang的运算符优先级实操案例
Golang的运算符优先级实操案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.运算符优先级案例 运算符是用来在程序运行时执行数学或逻辑运算的,在Go语言中,一个表达式可以包 ...
- 基于Ambari的WebUI实现集群扩容案例
基于Ambari的WebUI实现集群扩容案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.将HDP的服务托管给Ambari服务 1>.点击“Service Auto S ...
- I0.0 上升边沿 清空 MW10~MW58 联系多个知识点融合
编写程序 在I1.2 的上升边沿 触发 MW8+1的程序 实现方式1 M1.1 为中间变量 对应的STL语句表 执行结果 OK 已经仿真 . 现在尝试第2种方法 实现方式2: M1.1也是中间变量 S ...
- HTML的文档结构与语法(一)
一.走进Web开发 Web运行的原理: 二.HTML 1.1什么是html HTML是用来描述网页的一种语言 HTML指的是超文本标记语言(Hyper Text Markup Language) 超文 ...
- Percona-Toolkit 之 pt-kill 低效SQL
[root@ tools]#vi ptkill_master.confuser=rootpassword=asd.123port=3306busy-time=5printkill /u01/soft/ ...