题目链接: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 入门组] 切蛋糕相关推荐

  1. 【DFS】洛谷P6566 [NOI Online #3 入门组]观星(民间数据)

    Link Problem Sample-1 in 5 7 *...... ..**..* .*...*. ...*... ....*.. Sample-1 out 3 4 Sample-2 in 10 ...

  2. 洛谷6474[NOI Online #2 入门组]荆轲刺秦王

    题目背景 本测试数据为脚造,欢迎提供hack. 第18组数据卡了很多人,放于附件中供检查. 题目描述 时隔数年,刺客荆轲再次来到咸阳宫,试图刺杀嬴政. 咸阳宫的地图可以描述为一个 n 行 m 列的矩形 ...

  3. 每日一题——洛谷 P1551 亲戚 (并查集)

    大家好,我是爬行系,今天打卡并查集相关例题 文章目录 并查集 1.概念 2.模板 例题 1.题目描述 2.AC代码 更多练习题 总结 并查集 1.概念 并查集的思想是用一个数组表示了整片森林(pare ...

  4. 每日一题——洛谷 终于结束的起点

    大家好呀,我是爬行系,今天打卡的是斐波拉契数列 fid(n)的简单变体.欢迎大家加入我们的社区,一起每天打卡学习,可以和大佬一起学习哦 高校算法学习社区 文章目录 前言 题目描述 解题思路 AC代码 ...

  5. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.11日(2017省赛A第9题)

    2021年寒假每日一题,2017~2019年的省赛真题. 本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供. 后面的每日一题,每题发一个新博文,请大家看博客目录:https://b ...

  6. 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)

    文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 今天终于出核酸检测的结果,还好大家都没事,不然怕是要封城了!!! 今天还是寒假 ...

  7. 【寒假每日一题】分巧克力(个人练习)详细题解+推导证明(第八天)附带转载程序员壁纸

    文章目录 前言 题目 详细题解 写法1 O(nlogn)O(nlogn)O(nlogn) 推导证明 举一反三 总结 前言 话说今天开始准备搞一个秋招的GitHub,算是复习一遍了. 今天还是寒假每日一 ...

  8. AcWing寒假每日一题2058. 笨拙的手指

    AcWing寒假每日一题2058. 笨拙的手指 题目描述 奶牛贝茜正在学习如何在不同进制之间转换数字. 但是她总是犯错误,因为她无法轻易的用两个前蹄握住笔. 每当贝茜将数字转换为一个新的进制并写下结果 ...

  9. 倪文迪陪你学蓝桥杯2021寒假每日一题:1.20日(2018省赛A组第8题)

    2021年寒假每日一题,2017~2019年的省赛真题. 本文内容由倪文迪(华东理工大学计算机系软件192班)和罗勇军老师提供. 后面的每日一题,每题发一个新博文,请大家每天看博客蓝桥杯专栏: htt ...

最新文章

  1. ios java aes128_iOS AES128加密解密的两种模式(CBC和ECB)
  2. 微软的日历控件为什么从1753年开始?Sqlserver数据库不能插入1753年之前的数据?...
  3. 日志规范之为什么要使用SLF4J
  4. Flutter实战视频-移动电商-45.详细页_说明区域UI编写
  5. java的reentrantlock_JAVA中ReentrantLock详解(转)
  6. 软件设计师冲刺笔记(一)
  7. [CTO札记]Google数字图书馆对中国版权的威胁
  8. 使用T4模板动态生成邮件内容并储存到任意位置
  9. php数据库数据分割,使用PHP将分隔的值文件导入数据库时??,...
  10. [直观学习排序算法] 视觉直观感受若干常用排序算法
  11. 十个有趣的“大数据”经典数据挖掘案例
  12. 关于净推荐值(NPS)的理解
  13. 一些基本的Oracle命令
  14. LWIP之DNS域名解析(二)
  15. 雷达威力计算 matlab,威力雷达指标
  16. 用xinnet新网API实现动态域名
  17. App Store上架审核总被拒,可能的原因都在这儿了!
  18. ICCV 2023截止时间
  19. 超棒的NFS文档-来自chinaunix,讲到的NFS的几乎所有方面,包括版本、参数设定等...
  20. 免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航

热门文章

  1. 大数据数据名词:PV、IPV、UV等
  2. javaWeb 实现上传+下载 文件
  3. 入侵Twitter很容易:最大型黑客入侵背后的方法出人意料的简单
  4. 计算机反求设计的一般步骤,反求设计
  5. Google Play结算服务开发
  6. 用java计算每月天数_如何自动计算每月天数(快逸免费版)
  7. 手机摄影,我们需要知道哪些内容
  8. 互联网世界的绑架犯——勒索病毒
  9. 记录自己安装黑苹果后的archlinux启动引导修复过程
  10. 网络RTK基准站模糊度固定方法——三步法