http://acm.hdu.edu.cn/showproblem.php?pid=1495
Problem Description
大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为。因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多。但seeyou的手中只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101)毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 S==N+M,101>S>0,N>0,M>0) 。聪明的ACMER你们说他们能平分吗?如果能请输出倒可乐的最少的次数,如果不能输出"NO"。
Input
三个整数 : S 可乐的体积 , N 和 M是两个杯子的容量,以"0 0 0"结束。
Output
如果能平分的话请输出最少要倒的次数,否则输出"NO"。
Sample Input
7 4 3
4 1 3
0 0 0
Sample Output
NO
3
因为每次倒的方法只有6种,所以可以利用广搜枚举所有方法
#include <iostream>
#include <queue>
using namespace std;
struct cola{
int x, y, z, num; //x,y,z 表示当前杯子中的含量
}front, temp;
int s, n, m; //s,n,m 分别是装[x,y,z]的杯子的容积
bool hash[105][105][105]; //hash记忆到达状态,第二次出现,死循环,说明已经不可能
void bfs () //6种情况,分别独立对待,可倒成功者都入队列
{
queue<cola> q;
q.push (front);
while (!q.empty())
{
front = q.front(), q.pop();
if ((front.x == 0 && front.y == front.z) ||
(front.y == 0 && front.x == front.z) ||
(front.z == 0 && front.x == front.y))
{
printf ("%d\n", front.num); //符合平分情况,跳出
return ;
}
temp = front; //每步独立进行,所以都需要初始化
temp.num = front.num + 1;
//x -> y ①, x倒给y 【给出此步分析,下面同理】
if (temp.x > 0 && temp.y < n)
{
int left = n - temp.y; //求出容积是n的杯子还剩多少体积没装
if (temp.x >= left) //装x的杯子中的含量x>left, 即不可以全部倒入y那个杯子, 倒完后x那个杯子倒去left, y就满了--达到最大容积n
temp.x -= left, temp.y = n;
else temp.y += temp.x, temp.x = 0; //反之可以全部倒入
//cout << "-" << temp.x << ' ' << temp.y << ' ' << temp.z << endl;
if (!hash[temp.x][temp.y][temp.z])
{ //记录出现的3个杯子当前状态,如果再次出现,肯定是死循环,所以必无答案
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
temp = front; //初始化,下面同理
temp.num = front.num + 1;
//x -> z ②
if (temp.x > 0 && temp.z < m)
{
int left = m - temp.z;
if (temp.x >= left)
temp.x -= left, temp.z = m;
else temp.z += temp.x, temp.x = 0;
//cout << "--" << temp.x << ' ' << temp.y << ' ' << temp.z << endl;
if (!hash[temp.x][temp.y][temp.z])
{
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
temp = front;
temp.num = front.num + 1;
//y -> x ③
if (temp.y > 0 && temp.x < s)
{
int left = s - temp.x;
if (temp.y >= left)
temp.y -= left, temp.x = s;
else temp.x += temp.y, temp.y = 0;
if (!hash[temp.x][temp.y][temp.z])
{
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
temp = front;
temp.num = front.num + 1;
//y -> z ④
if (temp.y > 0 && temp.z < m)
{
int left = m - temp.z;
if (temp.y >= left)
temp.y -= left, temp.z = m;
else temp.z += temp.y, temp.y = 0;
if (!hash[temp.x][temp.y][temp.z])
{
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
temp = front;
temp.num = front.num + 1;
//z -> x ⑤
if (temp.z > 0 && temp.x < s)
{
int left = s - temp.x;
if (temp.z >= left)
temp.z -= left, temp.x = s;
else temp.x += temp.z, temp.z = 0;
if (!hash[temp.x][temp.y][temp.z])
{
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
temp = front;
temp.num = front.num + 1;
//z -> y ⑥
if (temp.z > 0 && temp.y < n)
{
int left = n - temp.y;
if (temp.z >= left)
temp.z -= left, temp.y = n;
else temp.y += temp.z, temp.z = 0;
if (!hash[temp.x][temp.y][temp.z])
{
hash[temp.x][temp.y][temp.z] = true;
q.push (temp);
}
}
}
puts ("NO"); //还未跳出,说明不可平分
return ;
}
int main()
{
while (scanf ("%d%d%d", &s, &n, &m) != EOF)
{
if (!s && !n && !m)
break;
if (s % 2)
{
puts ("NO");
continue;
}
memset (hash, false, sizeof(hash));
hash[s][0][0] = true;
front.x = s, front.y = 0, front.z = 0, front.num = 0;
bfs ();
}
return 0;
}
分享到:
相关推荐
标题中的“算法-非常可乐(HDU-1495)”是一个编程竞赛题目,通常在编程竞赛网站如HDU(杭州电子科技大学在线评测系统)上出现。这类题目旨在测试参赛者的算法设计和实现能力。这个题目可能涉及到的是一个特定的算法...
Delphi 12.3控件之数据库开发基础课程SQL学习01-认识Navicat SQL工具,创建数据库和表.rar
本教学质量评价系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 通过标签分类管理等方式,实现管理员;个人中心、公告信息管理、学院管理、学生管理、教师管理、督导管理、教师信息管理、学生评教管理、督导评教管理,学生;个人中心、公告信息管理、教师信息管理、学生评教管理,督导;公告信息管理、教师信息管理、督导评教管理,教师;个人中心、公告信息管理、教师信息管理、学生评教管理、督导评教管理等信息管理功能,从而达到对教学质量评价系统信息的高效管理。 关键词:教学质量评价系统 ,JSP技术,Mysql数据库
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本社区养老服务系统就是在这样的大环境下诞生,其可以帮助使用者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此社区养老服务系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。社区养老服务系统有管理员,用户两个角色。管理员功能有个人中心,用户管理,服务种类管理,社区服务管理,服务预约管理,物品种类管理,物品信息管理,借用信息管理,归还信息管理,活动分离管理,社区活动管理,活动报名管理,疫情监控管理,物业收费管理,资讯中心管理,意见中心管理,系统管理。用户可以注册登录,查看管理员发布的各中心信息,可以服务预约,借用归还,活动报名,发布自己的疫情监控信息,查看物业收费等操作。社区养老服务系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为
内容概要:本文档详细阐述了南京林业大学本科毕业设计(论文)的具体撰写规范和要求,旨在确保毕业生能够提交高质量的设计(论文)。主要内容涵盖了从标题到附录的所有部分的撰写要求和格式标准,强调毕业设计(论文)不仅检验学生的学术能力,也是教学质量的关键指标。文中详细描述了每个组成部分的内容要求和书写格式,如标题、摘要、正文、结论、参考文献及附录的具体规定,并提供了具体的标准和操作流程。同时,针对不同类型的专业和学科提出了不同的撰写细则,确保规范适应广泛的学术背景和研究主题。 适合人群:即将进行本科毕业设计(论文)撰写的南京林业大学在校生及其指导教师。 使用场景及目标:① 帮助学生熟悉并掌握毕业设计(论文)的各项要求,从而确保顺利完成学业要求;② 教师利用该规范来审核和指导学生的工作。 阅读建议:该文档条理清晰,分类细致,因此读者应按步骤逐步理解和实践每一部分内容的要求和规范。同时,注意不同专业对于篇幅、内容重点等方面可能存在的特定调整。此外,对于涉及具体的排版和技术术语部分,建议配合实际案例进行练习。
内容概要:本作业指导书详细介绍了面向电气与机器人工程专业的计算机视觉模块课程(EL3105),旨在让学生深入理解和实现实时视频稳定化技术,特别是针对相机抖动补偿的方法。学生需要撰写报告并实现算法,解释选择的视频稳定方法以及具体的软件实现步骤。报告应涵盖背景介绍、解决方案详述、实验过程及其结论。提供的两个预录制视频将作为学生练习的数据集来测试视频稳定性。此外,学生需保证提交材料为原创,未使用任何AI工具辅助。 适合人群:适用于电气与机器人专业本科与研究生级别的学生,在掌握了基本图像特征提取匹配的基础上进一步探索高级应用技能。 使用场景及目标:帮助学员掌握关键点检测、稳健匹配、运动估计等基础知识的应用能力,同时培养他们独立解决实际问题的能力和编程技巧,特别是在视频序列处理方面。 其他说明:评估日期明确为2024年春季学期初开始,并于三月底截止。成绩构成包括对采用方法合理性阐述占30%,具体编码执行效果占40%,最后还有15%取决于成果评价,剩下则是对于报告形式的要求如语言表述规范性和引用文献准确性方面的情况打分。所有提交均在线进行并且需要符合特定格式要求。
Delphi 12.3控件之Delphi12TMS WEB Core 2.6.0.0 Beta Retail Setup for D12 (September 24, 2024).rar
内容概要:本文档详细介绍了蚂蚁金服移动开发平台(mPaaS)及其各个核心子组件的构成和优势,涵盖移动网关(MGS)、移动推送(MPS)、移动分析(MAS)、移动同步(MSS)、实时发布(MDS)以及智能投放(MCDP)。各组件在提供基础能力的前提下分别具有不同特点。移动开发平台致力于为企业提供高可用、高效、稳定的一站式解决方案,并在架构、安全、灵活性等方面有着独特之处。 适用人群:移动应用开发商、产品经理、运维和技术专家、项目管理者以及其他相关人员。 使用场景及目标:通过提供一站式的移动开发方案,帮助企业更好地开发、管理和运维移动应用,降低技术门槛和发展成本,促进应用创新与发展。各组件具体应用于移动应用开发过程的不同环节中: 1. 开放移动服务能力:MGS用于建立统一的通信接口,简化移动端与服务端对接; 2. 移动信息即时触达:MPS用于实现移动推送,提供个性化消息通知; 3. 应用数据采集与分析:MAS用于大规模移动数据分析,辅助决策; 4. 数据增量推送及更新同步:MSS用于保证业务信息同步; 5. 提供高效的版本管理:MDS用于应用实时部署; 6. 支持灵活精准的投放运营:M
个人交友网站的主要使用者分为管理员和用户,实现功能包括管理员:个人中心、用户管理、交友信息管理、线下活动管理、活动报名管理、系统公告管理、论坛交流、系统管理,用户:个人中心、交友信息管理、活动报名管理、我的收藏管理,前台首页;首页、交友信息、线下活动、系统公告、论坛信息、我的、跳转到后台、客服等功能。由于本网站的功能模块设计比较全面,所以使得整个个人交友网站信息管理的过程得以实现。 本系统的使用可以实现本个人交友网站管理的信息化,可以方便管理员进行更加方便快捷的管理。 关键词:个人交友网站;JSP技术;MYSQL数据库;
自动鱼类计数器是一种用于精确计算通过特定区域(如鱼梯或鱼道)的鱼类数量的装置。这些设备使用传感器、摄像头或声波信号等各种技术,在鱼群游过时对其进行检测和计数。这些信息对于监测鱼类种群、评估洄游模式以及评估鱼类通道结构的有效性非常重要。自动鱼类计数器有助于研究人员和渔业管理人员就鱼类物种的保护和管理工作做出明智的决策。 据QYResearch调研团队最新报告“全球自动鱼计数器市场报告2024-2030”显示,预计2030年全球自动鱼计数器市场规模将达到0.6亿美元,未来几年年复合增长率CAGR为4.9%。 根据QYResearch头部企业研究中心调研,全球范围内自动鱼计数器生产商主要包括Vaki (MSD Animal Health )、Flatsetsund Engineering AS、Calitri Technology、AGK Kronawitter GmbH、Faivre、Fischtechnik International、Guangzhou Yuandian Intelligent Technology Co、Aquascan、Fu-Chen Auto Technology
最后一个win7稳定运行版本,支持视频和pdf查看,因为之前下载的别人打包好的文件,可以播放视频,但是打开pdf会闪退,所以自己编译了一个,有需要的可以试试
C# 打印模板,打印设计检测报告
本医院预约挂号系统采用的数据库是Mysql,使用JSP技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 关键词:医院预约挂号系统 ,JSP技术,Mysql数据库 通过标签分类管理等方式,实现管理员;个人中心、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、挂号预约管理、问题反馈管理、问题解答管理、系统管理,用户;个人中心、挂号预约管理、问题反馈管理、问题解答管理、我的收藏管理、医生;个人中心、出诊信息管理、挂号预约管理、问题反馈管理、问题解答管理,前台首页;首页、科室信息、出诊信息、公告信息、我的、跳转到后台等信息管理功能,从而达到对医院预约挂号系统信息的高效管理。
2025年3月CCF编程能力认证(C++)五级.pdf
yolo
轻量级可扩展网址导航系统V2.45完美去授权版 系统亮点 1、采用光年全新v5模板开发后台 2、后台内置8款主题色,分别是简约白、炫光绿、渐变紫、活力橙、少女粉、少女紫、科幻蓝、护眼黑 3、可管理无数引导页主题并且主题内可以进行不同的自定义设置,目前内置16套主题 持续增加中… 4、可单独开发各种插件,插件可进行自定义设置,目前内置七款实用插件 5、无需安装解压部署即可使用 6、数据管理包采用易航原创JsonDb数据包 7、主题内置神奇的$this语法 可快速开发并保留著作版权 8、对前台URL进行伪静态重写 对搜索引擎更加友好 9、内置硬防洪和硬防墙插件 告别域名忧虑 10、系统全开源 告别后门风险
277.基于51单片机的电压比较器【点阵,数码管,串口】(仿真).pdf
太阳能光伏系统的优化模型预测MPPT控制|MATLAB|Simulink 通过固定步长预测控制技术实现光伏阵列MPPT
LCOH成本计算参数+文献资料