【寒假每日一题】洛谷 P7471 [NOI Online 2021 入门组] 切蛋糕
题目链接:P7471 [NOI Online 2021 入门组] 切蛋糕 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目描述
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
样例输入 #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。
数据由 SSerxhs 提供。
解题思路
这道题可以通过观察测试样例,并且根据不同比例尝试分割蛋糕。我们可以找出以下规律:
可以按照比例中0的个数,分为三大情况:
1)若比例中有2个0,则返回0(样例 0 0 8)
2)若比例中只有1个0
①若剩下2个比例相等,则返回1(样例 9 9 0)
②若剩下2个比例不相等,则返回2(样例 0 5 3)
3)若比例中三个数都不为0
①若3个比例都相同,则返回2(三个部分各为120°)
②若只有2个比例相同,则返回2(样例 5 8 5)
③若3个比例各不相同,且没有2个比例相加等于另一个比例,则输出3(样例 1 7 4)
④若3个比例各不相同,且有2个比例相加等于另一个比例,则输出2(样例 6 2 4)
AC code:
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_set>using namespace std;int solution(vector<int> &a)
{unordered_set<int> s;int cntzero = 0; for(auto &i : a){if(i == 0)cntzero ++; // 统计比例中0的个数 s.insert(i);}if(cntzero == 2) // 若比例中有2个0,则返回0 return 0;else if(cntzero == 1) // 若比例中只有1个0 {if(s.size() == 2) // 若剩下2个比例相等,则返回1 return 1;else if(s.size() == 3) // 若剩下2个比例不相等,则返回2 return 2;}else if(cntzero == 0) // 若比例中三个数都不为0 {if(s.size() == 1) // 若3个比例都相同,则返回2 return 2;else if(s.size() == 2) // 若3个比例中,只有2个比例相同,则返回2 return 2;else if(s.size() == 3) // 若3个比例各不相同 {sort(a.begin(),a.end()); // 排序,方便进行比例计算 if(a[0] + a[1] == a[2]) // 若有2个比例相加等于另一个比例,则返回2 return 2;else // 若没有2个比例相加等于另一个比例,则返回3 return 3;}}
}int main()
{vector<int> v(3); int tt;cin>>tt;while(tt --){cin>>v[0]>>v[1]>>v[2];cout<<solution(v)<<endl;} return 0;
}
【寒假每日一题】洛谷 P7471 [NOI Online 2021 入门组] 切蛋糕相关推荐
- 【DFS】洛谷P6566 [NOI Online #3 入门组]观星(民间数据)
Link Problem Sample-1 in 5 7 *...... ..**..* .*...*. ...*... ....*.. Sample-1 out 3 4 Sample-2 in 10 ...
- 洛谷6474[NOI Online #2 入门组]荆轲刺秦王
题目背景 本测试数据为脚造,欢迎提供hack. 第18组数据卡了很多人,放于附件中供检查. 题目描述 时隔数年,刺客荆轲再次来到咸阳宫,试图刺杀嬴政. 咸阳宫的地图可以描述为一个 n 行 m 列的矩形 ...
- 每日一题——洛谷 P1551 亲戚 (并查集)
大家好,我是爬行系,今天打卡并查集相关例题 文章目录 并查集 1.概念 2.模板 例题 1.题目描述 2.AC代码 更多练习题 总结 并查集 1.概念 并查集的思想是用一个数组表示了整片森林(pare ...
- 每日一题——洛谷 终于结束的起点
大家好呀,我是爬行系,今天打卡的是斐波拉契数列 fid(n)的简单变体.欢迎大家加入我们的社区,一起每天打卡学习,可以和大佬一起学习哦 高校算法学习社区 文章目录 前言 题目描述 解题思路 AC代码 ...
- 倪文迪陪你学蓝桥杯2021寒假每日一题:1.11日(2017省赛A第9题)
2021年寒假每日一题,2017~2019年的省赛真题. 本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供. 后面的每日一题,每题发一个新博文,请大家看博客目录:https://b ...
- 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)
文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 今天终于出核酸检测的结果,还好大家都没事,不然怕是要封城了!!! 今天还是寒假 ...
- 【寒假每日一题】分巧克力(个人练习)详细题解+推导证明(第八天)附带转载程序员壁纸
文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 话说今天开始准备搞一个秋招的GitHub,算是复习一遍了. 今天还是寒假每日一 ...
- AcWing寒假每日一题2058. 笨拙的手指
AcWing寒假每日一题2058. 笨拙的手指 题目描述 奶牛贝茜正在学习如何在不同进制之间转换数字. 但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔. 每当贝茜将数字转换为一个新的进制并写下结果 ...
- 倪文迪陪你学蓝桥杯2021寒假每日一题:1.20日(2018省赛A组第8题)
2021年寒假每日一题,2017~2019年的省赛真题. 本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供. 后面的每日一题,每题发一个新博文,请大家每天看博客蓝桥杯专栏: htt ...
最新文章
- ios java aes128_iOS AES128加密解密的两种模式(CBC和ECB)
- 微软的日历控件为什么从1753年开始?Sqlserver数据库不能插入1753年之前的数据?...
- 日志规范之为什么要使用SLF4J
- Flutter实战视频-移动电商-45.详细页_说明区域UI编写
- java的reentrantlock_JAVA中ReentrantLock详解(转)
- 软件设计师冲刺笔记(一)
- [CTO札记]Google数字图书馆对中国版权的威胁
- 使用T4模板动态生成邮件内容并储存到任意位置
- php数据库数据分割,使用PHP将分隔的值文件导入数据库时??,...
- [直观学习排序算法] 视觉直观感受若干常用排序算法
- 十个有趣的“大数据”经典数据挖掘案例
- 关于净推荐值(NPS)的理解
- 一些基本的Oracle命令
- LWIP之DNS域名解析(二)
- 雷达威力计算 matlab,威力雷达指标
- 用xinnet新网API实现动态域名
- App Store上架审核总被拒,可能的原因都在这儿了!
- ICCV 2023截止时间
- 超棒的NFS文档-来自chinaunix,讲到的NFS的几乎所有方面,包括版本、参数设定等...
- 免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航