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.给定二叉树的中序遍历和后序遍历,可以构造出这棵二叉树,方法是根据 ...
随机推荐
- 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:匿名内部类
interface A{ public void printInfo() ; // } class B implements A{ // 实现接口 public void printInfo(){ S ...
- winodws系统搭建git服务--Tomcat--jdk配置
一.http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载jdk程序: 1.下载 ...
- memset函数总结
之前有一个程序栽在了memset函数上面,对memset函数一直耿耿于怀,于是想总结一下这个常用但是总出错的函数. memset在string.h文件中是这么定义的: void*代表这个函数的返回值可 ...
- 洛谷 P4391 [BOI2009]Radio Transmission 无线传输
题目传送门 解题思路: 本题所要求的循环节,其实就是最长公共前缀的前缀长度减去前后缀重叠的一部分 AC代码: #include<iostream> #include<cstdio&g ...
- GoJS、AngularJS自定义组件JS SDK注解参考
通常一个SDK包含一个或多个API 下面是一个SDK的实例: if (typeof(wlNgApp) === "undefined") wlNgApp = angular.modu ...
- gojs 部分功能实现
最近做的项目用到了gojs,使用了一段时间发现其功能特别强大,先记录下目前自己用到的把 1. 初始化画布 myDiagram = $(go.Diagram, "myDiagramDiv&qu ...
- mysql 分组查询入门
- 获取控件的xy坐标
procedure TForm1.SpeedButton1Click(Sender: TObject); var Apoint:TPoint; begin APoint:=TSpeedButt ...
- C++ mfc 简易文本编辑器 遇到的一些问题
[题目40]简易文本编辑器. 设计一个简易的文本编辑器. 设计要求: (1) 具有图形菜单界面: (2) 查找,替换(等长,不等长),插入(插串,文本块的插入).文本块移动(行块,列块移动),删除; ...
- 使用 Dashboard【转】
上一节我们完成了 Kubernetes Dashboard 的安装,本节就来实践一下. Dashboard 界面结构 Dashboard 的界面很简洁,分为三个大的区域. 顶部操作区在这里用户可以搜索 ...