POJ 3122 分披萨(二分查找)

题目链接:http://poj.org/problem?id=3122

题目大意:

有 n 块披萨(大小不一样), f 个人分,包含主人自己 f+1 人;
每人吃的披萨必须是一块披萨上切下来的。每个人吃的披萨相等,披萨可以有剩余。求每人吃的最大披萨面积。

思路:

  • 假设每人分得的披萨面积等效为半径 R的圆;
  • 每块披萨可以分给几个人呢? r[i] 表示披萨半径,则是 r[i]2/R2 取整个人
  • 然后全部累加起来,如果总和大于等于 f+1,则每个人还有分更大的披萨的可能,R取值增大
  • 如果总和小于 f+1,则每个人分的太大了,不够分的,R取值减小
  • R的取值范围在(0,max(r[i]))

Wrong Answer代码

/*** @description: 有 n 块披萨(大小不一样), f 个人分,包含主人自己 f+1 人;*                  每人吃的披萨必须是一块披萨上切下来的。求* @author: michael ming* @date: 2019/4/20 0:23* @modified by: */
#include <iostream>
#include <iomanip>
#define PI 3.14159265359
using namespace std;
const double error = 1e-7;
double find_max_R(size_t pizza_num, int *r_pizza, double r_low, double r_high, size_t people)
{double R_we_want = r_low+(r_high-r_low)/2;size_t people_get_pizza = 0;while(r_high - r_low > error){people_get_pizza = 0;R_we_want = r_low+(r_high-r_low)/2;for(int i = 0; i < pizza_num; ++i)people_get_pizza += (int)(r_pizza[i]*r_pizza[i]/(R_we_want*R_we_want));if(people_get_pizza >= people)r_low = R_we_want;elser_high = R_we_want;}return R_we_want;
}
int main()
{size_t t, pizza_num, friend_num;double r_max_pizza = 0;cin >> t;while(t--){cin >> pizza_num >> friend_num;int *r_pizza = new int [pizza_num];for(int i = 0; i < pizza_num; ++i){cin >> r_pizza[i];r_max_pizza = r_pizza[i] > r_max_pizza ? r_pizza[i] : r_max_pizza;}r_max_pizza = find_max_R(pizza_num,r_pizza,0,r_max_pizza,friend_num+1);cout << setiosflags(ios::fixed) << setprecision(4) << PI*r_max_pizza*r_max_pizza << endl;delete[] r_pizza;r_pizza = NULL;}return 0;
}

在这里插入图片描述

AC代码(主要修改,精度问题,把求人数的除法改成减法)

/*** @description: 有 n 块披萨(大小不一样), f 个人分,包含主人自己 f+1 人;*                  每人吃的披萨必须是一块披萨上切下来的。求* @author: michael ming* @date: 2019/4/20 0:23* @modified by: */
#include <iostream>
#include <iomanip>
#include <math.h>
#include <algorithm>
#define PI acos(-1.0)
using namespace std;
const double error = 1e-7;
double find_max_R(size_t pizza_num, double *s_pizza, double s_low, double s_high, size_t people)
{double S_we_want = s_low+(s_high-s_low)/2.0;size_t people_get_pizza = 0;while(s_high - s_low > error){people_get_pizza = 0;S_we_want = s_low+(s_high-s_low)/2.0;for(int i = 0; i < pizza_num; ++i){double temp = s_pizza[i];while(temp-S_we_want>=0){temp -= S_we_want;	//改成减法,不易丢失精度people_get_pizza++;}}if(people_get_pizza >= people)s_low = S_we_want;elses_high = S_we_want;}return S_we_want;
}
int main()
{size_t t, pizza_num, friend_num;double s_max_pizza = 0.0;cin >> t;while(t--){cin >> pizza_num >> friend_num;double *s_pizza = new double [pizza_num];for(int i = 0; i < pizza_num; ++i){cin >> s_pizza[i];s_pizza[i] *= s_pizza[i];}sort(s_pizza, s_pizza+pizza_num);s_max_pizza = find_max_R(pizza_num,s_pizza,0,s_pizza[pizza_num-1],friend_num+1);cout << setiosflags(ios::fixed) << setprecision(4) << PI*s_max_pizza << endl;delete[] s_pizza;s_pizza = NULL;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

没错,继事理图谱后,我们又搞事情了:数地工场自然语言处理语义开放平台正式对外发布!

2020年的钟声即将敲响&#xff0c;在这辞旧迎新之际&#xff0c;经过近几年在Fintech领域中的自然语言处理技术研发和产品迭代积累&#xff0c;数据地平线Datahorizon迎来重大更新&#xff0c;以数据、事件、逻辑的语义toolbox为愿景的数地工场开放平台V1.0正式对外发布。 数地…

论文浅尝 | Understanding Black-box Predictions via Influence Func

Cite: Koh P W, Liang P. Understanding black-box predictions via influence functions[J]. arXiv preprint arXiv:1703.04730, 2017.链接&#xff1a;https://arxiv.org/pdf/1703.04730GitHub项目地址&#xff1a;http://bit.ly/gt-influence本文使用影响函数(Influence fun…

ICLR2020满分论文 | 为什么梯度裁剪能加速模型训练?

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者&#xff1a;苏剑林&#xff08;来自追一科技&#xff0c;人称“苏神”&#xff09;前言需要许多时间步计算的循环神经网络&#xff0c;如LSTM、GRU&#xff0c;往往存在梯度爆炸的问题。其目标函数可能存在悬崖一样斜率较大的区域&…

快手高级Java四轮面试题:设计模式+红黑树+Java锁+Redis等

快手Java一面&#xff08;一个小时十分钟&#xff09; 1.自我介绍 2.说说B树和B树的区别&#xff0c;优缺点等&#xff1f; 3聊聊Spring&#xff0c;主要IOC等等 4多线程JUC包下的一些常见的类&#xff0c;比如CountDownLatch、Semaphore等 5.锁的概念&#xff0c;锁相关的…

数据结构--跳表SkipList

对单链表查找一个元素的时间复杂度是 O(n)通过对链表建立多级索引的结构&#xff0c;就是跳表&#xff0c;查找任意数据、插入数据、删除数据的时间复杂度均为 O(log n)前提&#xff1a;建立了索引&#xff0c;用空间换时间的思路(每两个节点建立一个索引)索引节点总和 n/2n/4n…

领域词汇知识库的类型、可用资源与构建技术漫谈

词是语言系统中重要的语言单元&#xff0c;词语是开展文本处理的基础&#xff0c;在语义表示上具有比字符更丰富的表达能力。词语具有领域特性&#xff0c;不同的领域具有不同的词汇体系&#xff0c;如军事领域、医疗领域、公共治安领域、金融领域之间存在着很大的差异性。这种…

论文浅尝 | EARL: Joint Entity and Relation Linking for QA over KG

Mohnish Dubey, Debayan Banerjee, Debanjan Chaudhuri, Jens Lehmann: EARL: Joint Entity and Relation Linking for Question Answering over Knowledge Graphs. International Semantic Web Conference (1) 2018: 108-126链接&#xff1a;https://link.springer.com/conten…

百度高级Java三面题目!涵盖JVM +Java锁+分布式等

百度高级Java一面 自我介绍 对象相等的判断&#xff0c;equals方法实现。 Hashcode的作用&#xff0c;与 equal 有什么区别&#xff1f; Java中CAS算法&#xff1f; G1回收器讲一下&#xff1f; HashMap&#xff0c;ConcurrentHashMap与LinkedHashMap的区别 如何在多线程环…

python--从入门到实践--chapter 12 pygame_Alien_Invasion

安装pygame包&#xff0c;把安装好的包copy一份到pycharm工程目录下&#xff0c;不然找不到pygame包 抄一遍书上的代码&#xff1a; settings.py class Settings():def __init__(self):self.screen_width 1200self.screen_height 800self.bg_color (255, 255, 255)self.s…

实时事理学习与搜索平台DemoV1.0正式对外发布

我们团队探索了一种将事件、概念、逻辑、实时学习、多类知识库实时更新串起来的知识服务新模式。一个面向事理的实时学习和搜索系统Demo&#xff0c;取名叫“学迹”&#xff0c;取自“学事理&#xff0c;知行迹”。 项目地址&#xff1a;https://xueji.zhiwenben.com 一、 “学…

卖萌屋算法工程师思维导图part3—深度学习篇

卖萌屋的妹子们&#xff08;划掉&#xff09;作者团整理的算法工程师思维导图&#xff0c;求职/自我提升/查漏补缺神器。该手册一共分为数据结构与算法、数学基础、统计机器学习和深度学习四个部分。下面是第三部分深度学习的内容~公众号后台回复【思维导图】获取完整手册&…

论文浅尝 | Zero-Shot Transfer Learning for Event Extraction

事件抽取的目标是在非结构化的文本中确认事件的触发词&#xff08;Eventtrigger&#xff09;和参与者&#xff08;Event argument&#xff09;&#xff0c;并判断触法词的事件类型&#xff08;Eventtype&#xff09;&#xff0c;判断参与者在事件中的扮演的角色&#xff08;Arg…

今日头条Java后台Java研发三面题目

最近有同学在优知学院留言区留言是否能发布今日头条的面试题目&#xff0c;这位同学&#xff0c;题目来了哦~ 一面 concurrent包下面用过哪些&#xff1f; countdownlatch功能实现 synchronized和lock区别&#xff0c;重入锁 thread和runnable的区别 AtomicInteger实现原理…

实时事理逻辑知识库(事理图谱)终身学习项目-EventKGNELL(学迹)

EventKGNELL EventKGNELL, event knowlege graph never end learning system, a event-centric knowledge base search system&#xff0c;实时事理逻辑知识库终身学习和事件为核心的知识库搜索项目。包括事件概念抽取、事件因果逻辑抽取、事件数据关联推荐与推理。 项目地址&…

python--从入门到实践--chapter 15 16 17 生成数据/下载数据/web API

1.随机漫步 random_walk.py from random import choice class RandomWalk():def __init__(self, num_points5000):self.num_points num_pointsself.x_value [0]self.y_value [0]def fill_walk(self):while len(self.x_value) < self.num_points:x_direction choice([1…

ACL2020 | 基于Knowledge Embedding的多跳知识图谱问答

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者&#xff1a;舒意恒&#xff08;南京大学硕士生&#xff0c;知识图谱方向&#xff09;背景什么是知识图谱问答&#xff1f;知识图谱&#xff08;KG&#xff09;是一个多关系图&#xff0c;其中包含数以百万计的实体&#xff0c;以及…

论文浅尝 | 基于超平面的时间感知知识图谱嵌入

链接&#xff1a;http://talukdar.net/papers/emnlp2018_HyTE.pdf本文主要关注 KG embedding 中三元组成立的时间有效性问题&#xff0c;比如三元组(Cristiano Ronaldo, playsFor, Manchester United)&#xff0c;其成立的有效时间段是2003年到2009年&#xff0c;这个使三元组有…

Java面试进阶:Dubbo、Zookeeper面试题锦集

Dubbo面试题锦集 1、默认也推荐使用netty框架&#xff0c;还有mina。 2、默认是阻塞的&#xff0c;可以异步调用&#xff0c;没有返回值的可以这么做。 3、推荐使用zookeeper注册中心&#xff0c;还有redis等不推荐。 4、默认使用Hessian序列化&#xff0c;还有Duddo、FastJ…

POJ 1064 分割线缆(二分查找)

题目链接&#xff1a;http://poj.org/problem?id1064 题目大意&#xff1a;多根电缆切成指定段数&#xff08;每段相同长度&#xff09;&#xff0c;求每段线缆的最大长度&#xff08;精确到0.01&#xff09; 这题精度控制是难点&#xff0c;方法很简单&#xff0c;二分查找…

Learning to rank基本算法小结

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/26539920 Learning to rank基本算法小结最近工作中需要调研一下搜索排序相关的方法&#xff0c;这里写一篇水文&#xff0c;总结一下几天下来的调研成果。包括Learning to rank 基本方法Learning to rank 指标介绍LambdaMART…