
Pie Cable master 两道类似的二分题
发布日期:2021-05-07 16:48:52
浏览次数:26
分类:技术文章
本文共 1238 字,大约阅读时间需要 4 分钟。
#include#include #include #include #include using namespace std;#define pi acos(-1.0)double a[10010];int main(){ int t; double l,r; double mid; scanf("%d",&t); while(t--){ memset(a,0,sizeof(a)); int n; int f; scanf("%d%d",&n,&f); double Max=0; for(int i=0;i 0.0000001){ mid=(r+l)/2; int sum=0; for(int i=0;i f) l=mid; else r=mid; } printf("%.4lf\n",mid); } return 0;}
题目大意 多组输入,每组,n,f,n个饼f个人分,饼可以切开,形状随意,体积相同就行,输出每个人可以分到的最大的体积。
问题分析,我们在存数组的时候同时求出饼的体积,找到最大的那个。声明两个指针,左和右,饼的体积是没有排序的,每次遍历一遍,(int)强制转换使得一共有两种状态,非零即一,sum记录的是大于mid的答案,(mid不是中位数,只是相当于一个指针,确定能取的饼的最大体积),如果大于f的个数,说明mid足够小,就把左指针移动到mid的位置,将想取得的体积(mid)变大,反之,说明mid足够大… 有大于f个体积 V 的 a[i] (第i个饼的体积) 是解题的关键,剩下的思想是寻找合适的V,通过移动l,r确定V在(0~Max)中的值,此处的V,就是代码中出现的mid。#include#include #include #include #include #include #include #include #include #include #include using namespace std;const int maxn=1010;const int INF=0x3f3f3f3f;double a[10005];int main(){ int n,k; double l,r; double mid; while(~scanf("%d%d",&n,&k)){ double Max=-1; if(n==0&&k==0) break; for(int i=0;i =k) l=mid; else r=mid; } printf("%.2lf\n",mid); } return 0;}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月28日 18时04分10秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
设计模式之组合模式
2019-03-04
(Python学习笔记):字典
2019-03-04
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
2019-03-04
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2019-03-04
leetcode 14 最长公共前缀
2019-03-04
做做Java
2019-03-04
map的find函数和count函数
2019-03-04
C++并发与多线程(一)
2019-03-04
7628 EDCCA认证寄存器修改(认证自适应)
2019-03-04
计算机网络子网划分错题集
2019-03-04
java一些基本程序
2019-03-04
神经元与神经网络一之概述
2019-03-04
FANUC机器人R-30iB_R-30iB PLUS备件规格型号统计整理
2019-03-04
FANUC机器人的镜像备份操作及U盘格式化具体步骤
2019-03-04
vue-依赖-点击复制
2019-03-04
js井子棋
2019-03-04
LeetCode 116填充每个节点的下一个右侧结点指针
2019-03-04
2021-4-28【PTA】【L2-1 包装机 (25 分)】
2019-03-04
Arduino mega2560+MPU6050利用加速度值控制舵机
2019-03-04