[NOI Online 2021 入门组] 切蛋糕

news2024/12/23 5:42:48

题目描述:

Alice、Bob 和 Cindy 三个好朋友得到了一个圆形蛋糕,他们打算分享这个蛋糕。

三个人的需求量分别为 a,b,c现在请你帮他们切蛋糕,规则如下:

  1. 每次切蛋糕可以选择蛋糕的任意一条直径,并沿这条直径切一刀(注意切完后不会立刻将蛋糕分成两部分)。

  2. 设你一共切了 n 刀,那么你将得到 2n 个扇形的蛋糕(特别地,切了 0 刀被认为是有一个扇形,即整个圆形蛋糕),将这些蛋糕分配给 Alice,Bob 和 Cindy,要求每个扇形蛋糕只能完整地分给一个人。

  3. 三人分到的蛋糕面积比需要为 a:b:c(不保证是最简比例,且如果 a:b:c 中某个数为 0,表示那个人不吃蛋糕)。

为了完成这个任务,你至少需要切几刀?

输入格式:

本题单个测试点包含多组数据。

第一行包含一个整数 T,表示数据组数。

接下来 T 行,每行包含三个整数 a,b,c,表示三人的需求量。

输出格式:

输出 T 行,第 i 行的输出表示第 i组数据中你至少需要切蛋糕的次数。

输入输出样例:

输入 #1:

6
0 0 8
0 5 3
9 9 0
6 2 4
1 7 4
5 8 5

输出 #1:

0
2
1
2
3
2

说明/提示

样例 1 解释:

数据范围与提示

30% 的数据满足:a=b=0。

60% 的数据满足:a=0。

100% 的数据满足:1≤T≤10^4,0≤a,b,c≤10^8,保证 a+b+c>0。

 思路:

这一道题做法是分类讨论。

假设 a≤b≤c,那么就有以下结论:

● a,b 等于 0

很明显,一刀都不用切,全部给 c就可以了,切零刀。

● 有且仅有 a 等于 0

● b=c

在这种情况下,分出两半分别给 b,c 即可,切一刀。

● b≠c

  在这种情况下,切一刀肯定是不行的。但是,容易证明,切两刀可以将蛋糕分成任意比例的两份。因此切两刀。

● a,b,c≠0且 a=b(b=c 同理)

  可以切两刀,分成的四份中,取任意相同的两份给 a,b,剩下相同的两份给 c 即可(按照a=0&b!=c 的结论推出)

● a,b,c≠0且 a+b=c

可以切两刀,分成的四份中,取两份不同的给 a,b,剩下不同的两份给 c 便可以满足 a+b=c;依然按照 a=0&b!=c 的结论得到,上述情况可以成立。

● 否则

切三刀。根据 a=0&b!=c 的结论容易扩展得,切三刀可以分成任意三份的比例。

容易证明,切两刀可以将蛋糕分成任意比例的两份。

对于这一段的证明如下:

设圆的面积为 S,切两刀得到如下:

由于这两道是随意切的,所以 k 可以取到 0<k<1 的所有值。因此,同样颜色的扇形面积之和也可以取到 0<S'<S 的所有值。 

代码:

#include<bits/stdc++.h> //万能头文件 
using namespace std; //批准使用std类 
int main(){ ///main主函数 
	int t; //样例数 
	cin>>t; //输入 
	while(t--){ //输入t个样例 
		int a[3]; //定义a,b,c 
		cin>>a[0]>>a[1]>>a[2]; //输入 
		sort(a,a+3); //排序,要满足a<=b<=c 
		if(a[0]==0&&a[1]==0) //第一种情况 
		  cout<<"0"<<endl; //输出0 
		else if(a[0]==0){ //如果一个为0 
			if(a[1]==a[2]) //看看另外两人是否相等 
			  cout<<"1"<<endl; //相等就切一刀 
			else //不相等 
			  cout<<"2"<<endl; //切两刀(以证明切两刀能分出所有比例) 
		}
		else{ //如果三个都没有为0的 
			if(a[0]==a[1]||a[1]==a[2]||(a[0]+a[1]==a[2])) //如果有任意两个相等或者第一个加第二个等于第三个 
			  cout<<"2"<<endl; //就只用切2刀 
			else //否则 
			  cout<<"3"<<endl; //切三刀 
		}
	}
	return 0; //结束 
}

总结;

   这道题作为NOI Online 2021的第一题,还是比较简单的,只需要手推一下,就可以进行分支判断了!

题目链接:

[NOI Online 2021 入门组] 切蛋糕 - 洛谷https://www.luogu.com.cn/problem/P7471

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

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

相关文章

【C++】模板进阶:非类型的模板参数与模板的特化

一、非类型模板参数 模板参数分类&#xff1a;类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之后的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将…

GMP调度模型

GMP的发展: go 1.1版本之前时候过使用的是GM模型全局队列的模式。GM模型全局队列的模式M&#xff1a;1 内核线程&#xff1a;协程新建一个协程G的时候会放入全局队列中&#xff0c;每次执行一个协程G的时候&#xff0c;内核线程M会从全局队列中获取一个协程G执行,因为内核线程…

Dataset and DataLoader 加载数据集

文章目录7、Dataset and DataLoader 加载数据集7.1 Revision7.1.1 Manual data feed 手动数据输入7.1.2 Epoch, Batch-Size, Iterations7.2 DataLoader 数据加载器7.3 Dataset 数据集7.3.1 import7.3.2 class7.3.3 DataLoader7.4 Example: Diabetes Dataset7.4.1 Prepare datas…

【微服务】Seata的部署和集成

Seata的部署和集成一、部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务二、微服务集成seata1.引入依赖2.修改配置文件三、TC服务的高可用和异地容灾1.模拟异地容灾的TC集群2.将事务组映射配置到nacos3.微服务读取nacos配置一、部署Sea…

【Redis】.net core 3.1 Redis安装和简单使用

Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 简单来说&#xff0c;就是一个键值对数据库。 Redis支持的…

DynaSLAM-5 DynaSLAM中Mask R-CNN部分源码解析(Ⅳ)

目录 1.ROIAlign层 2.Mask分支 3.整体框架回顾 1.ROIAlign层 在上文中&#xff0c;我们现在手里已经有了正负样本数据以及它们对应的标签。接下来我们就要进行预测的操作了&#xff01; 但在预测之前&#xff0c;还有些小问题&#xff1a; ①每个ROI大小也不一样&#xff0c…

Biotin-SS-Sulfo-NHS;CAS:325143-98-4;生物素-二硫键-磺酸-活性酯

名称&#xff1a;生物素-二硫键-磺酸-活性酯 英文名称&#xff1a;Biotin-SS-Sulfo-NHS CAS:325143-98-4 分子式&#xff1a;C19H27N4NaO9S4 分子量&#xff1a;606.67 外观&#xff1a;白色固体或粘稠液体&#xff0c;取决于分子量大小 溶剂&#xff1a;溶于大部分有机溶…

JVM自动内存管理核心知识速览

目录运行时数据区程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存对象对象的创建类加载检查分配内存指针碰撞&#xff08;Bump The Pointer&#xff09;空闲列表&#xff08;Free List&#xff09;内存分配并发问题初始化值设置对象头执行init方法对象的内存…

一、Qt汽车仪表盘之绘制背景-绘制饼图

一、绘图坐标系分析 1、坐标系平移 1、从原来的坐标系中心移动到矩形仪表盘中心&#xff0c;相对应的坐标会发生变化。 2、了解绘制饼图的含义 &#xff08;1&#xff09;坐标系平移之后坐标变化 &#xff08;2&#xff09;绘制第一个饼图效果 第一个饼图&#xff1a;坐标…

[COMST 2022] 元宇宙的安全隐私问题

A Survey on Metaverse: Fundamentals, Security, and Privacyhttps://ieeexplore.ieee.org/abstract/document/9880528摘要元宇宙&#xff0c;作为下一代互联网的一个不断发展的范式&#xff0c;旨在建立一个完全沉浸式、超时空、自我维持的虚拟共享空间&#xff0c;供人类玩耍…

进销存ERP源码/ 进销存APP源码/小程序ERP系统/Thinkphp+Uniapp全开源销售进库出入库

框架&#xff1a;ThinkPHP5.0.24 uniapp 包含:服务端php全套开源源码&#xff0c;uniapp前端全套开源源码&#xff08;可发布H5/android/iod/微信小程序/抖音小程序/支付宝/百度小程序&#xff09; 注&#xff1a;这个是全开源&#xff0c;随便你怎么开&#xff0c;怎么来&…

JUC并发编程之SynchronousQueue的底层原理

作者简介&#xff1a;专注于研究Linux内核、Hotspot虚拟机、汇编语言、JDK源码、各大中间件源码等等喜欢的话&#xff0c;可以三连关注~SynchronousQueue是什么在JDK源码中JUC包下的并发编程阻塞/同步队列实现各种花样&#xff0c;但是队列的实现无非是。先进先出&#xff0c;后…

程序员必备的Linux命令——文件及目录命令

Linux命令就是我们对Linux系统进行管理的操作指令。类似于我们操作windows系统中可视化的各种操作动作。 在Linux系统中&#xff0c;我们任何东西都被认做是文件&#xff0c;比如cpu、内存、键盘以及用户全是文件。Linux命令类似于之前的DOS命令。 Linux系统中命令分为两种&a…

ORB-SLAM3算法和代码学习——系统初始化浅谈

总述 先放一张LocalMapping的代码结构图 相比于ORB-SLAM2&#xff0c;ORB-SLAM3的系统初始化分成了三个主要的模块&#xff1a;纯视觉初始化、纯IMU初始化、视觉和IMU联合优化。 纯视觉初始化和之前一样就是单目或者双目初始化&#xff0c;在Tracking线程中进行&#xff1b…

js数据结构之栈

1.栈数据结构 栈是一种遵从后进先出&#xff08;LIFO&#xff09;原则的有序集合。新添加或待删除的元素都保存在栈的同一端&#xff0c;称作栈顶&#xff0c;另一端就叫栈底。在栈里&#xff0c;新元素都靠近栈顶&#xff0c;旧元素都接近栈底。 在现实生活中也能发现许多栈的…

【服务器数据恢复】Raid5崩溃导致EMC存储不可用的数据恢复案例

服务器数据恢复环境&#xff1a; EMC存储&#xff0c;多块stat硬盘组建raid5磁盘阵列&#xff0c;两块热备盘&#xff0c;上层采用zfs文件系统。 服务器故障&检测&分析&#xff1a; EMC存储中的raid5磁盘阵列有2块硬盘出现故障&#xff0c;但是只有一块热备盘被激活&am…

关于原型和原型链的整理学习

关于原型和原型链是很多人学习或面试时遇到的问题&#xff0c;可能部分不懂&#xff0c;部分懂但不会说&#xff0c;下面关于原型和原型链进行简单的整理总结&#xff0c;希望可以帮助到大家。 一、JS中的原型和原型链 1、原型说明 所有的引用类型&#xff08;数组、函数、对…

【Tools】Git和VS Code配置

文章目录0 前期教程1 前言2 基本使用2.1 配置2.2 获取帮助3 GitHub仓库和git3.1 新建一个GitHub仓库3.2 删除一个仓库&#xff08;repository&#xff09;3.3 上传项目代码4 git常用指令4.1 创建分支4.2 合并分支4.3 在git提交记录上移动4.4 撤销变更4.5 整理提交记录5 在VS Co…

蓝桥杯 stm32 DAC

文章代码使用 HAL 库。 文章目录前言一、根据手册了解 DAC 重要特性 :二、CubeMX 创建工程&#xff1a;三、DAC 代码&#xff1a;1. 设置DAC输出值函数。2. 开启DAC输出函数。3. DAC 输出电压。总结前言 DAC 就是 数字模拟信号转换器 &#xff0c;也就是把 数字信号转变成模拟…

实施MES系统前,先想清楚首先用来解决什么问题

MES系统首先用来解决什么问题&#xff1f; 很多人会自然而然地认为&#xff0c;MES系统是用来解决管理问题的&#xff0c;是为了明确管理流程的&#xff0c;是为了建立管控标准的…… 甲方会有很多很多想解决的问题&#xff0c;甚至在系统导入过程中&#xff0c;各个部门也会…