首页 > 其他分享 >13.非常可乐(简单搜索 BFS)

13.非常可乐(简单搜索 BFS)

时间:2023-05-02 19:00:09浏览次数:44  
标签:seeyou 输出 13 min int BFS && 可乐

非常可乐

题目

大家一定觉的运动以后喝可乐是一件很惬意的事情,但是 seeyou 却不这么认为。

因为每次当 seeyou 买了可乐以后,阿牛就要求和 seeyou 一起分享这一瓶可乐,而且一定要喝的和 seeyou 一样多。

但 seeyou 的手中只有两个杯子,它们的容量分别是 \(N\) 毫升和 \(M\) 毫升。

可乐的体积为 \(S(S<101)\) 毫升 (正好装满一瓶) ,它们三个之间可以相互倒可乐 (都是没有刻度的,且 $S=N+M,101>S>0,N>0,M>0
) $ 。

聪明的 \(ACMER\) 你们说他们能平分吗?

如果能请输出倒可乐的最少的次数,如果不能输出 NO

输入格式

输入包含多组测试数据。
每组数据一行,三个整数 \(S,N,M\)。
当输入一行为 0 0 0 时,表示输入结束。

输出格式

每组数据输出一行结果,如果能够平分,则输出倒可乐的最少的次数,否则输出 NO。

数据范围

$ S=N+M,101>S>0,N>0,M>0$

输入样例:

7 4 3
4 1 3
0 0 0

输出样例:

NO
3

思路

\(BFS\) 最短步数模型,每次扩展搜索 \(6\) 种情况,第一次搜到即为最优解

代码

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int d[N][N][N];
int s,n,m;
struct Pos
{
	int x,y,z;
};

int bfs()
{
	memset(d,-1,sizeof d);
	queue<Pos>q;
	q.push({0,0,s});
	d[0][0][s]=0;
	
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		
		//当有两个相同数的时候,得到答案
		if(t.x*2==s&&t.y*2==s||t.x*2==s&&t.z*2==s||t.y*2==s&&t.z*2==s)return d[t.x][t.y][t.z];
		
		
		//枚举六种情况
		int ab=min(t.x,m-t.y),ac=min(t.x,s-t.z);
		int ba=min(t.y,n-t.x),bc=min(t.y,s-t.z);
		int ca=min(t.z,n-t.x),cb=min(t.z,m-t.y);
		int dx[]={t.x-ab,t.x-ac,t.x+ba,t.x,t.x+ca,t.x};
		int dy[]={t.y+ab,t.y,t.y-ba,t.y-bc,t.y,t.y+cb};
		int dz[]={t.z,t.z+ac,t.z,t.z+bc,t.z-ca,t.z-cb};
		
		for(int i=0;i<6;i++)
		{
			int a=dx[i],b=dy[i],c=dz[i];
			
			if(d[a][b][c]==-1)
			{  
				d[a][b][c]=d[t.x][t.y][t.z]+1;
				q.push({a,b,c});
			}
		}
		
	}
	
	return -1;
}
int main()
{
	while(cin>>s>>n>>m,s&&n&&m)
	{
		int t=bfs();
		if(t==-1)puts("NO");
		else cout<<t<<endl;
	}
	
	return 0;
}

标签:seeyou,输出,13,min,int,BFS,&&,可乐
From: https://www.cnblogs.com/zzmxj/p/17367984.html

相关文章

  • u8g2 ssd1306 长条OLED的高清大logo绘制程序drawLogo
    这段代码有什么用?一般来讲,移植后只要能显示任何指定的字符就行了打点画线都可以我一般选择显示U8G2的logo如图  代码voiddrawLogo12832(u8g2_t*u8g2){u8g2_SetFontMode(u8g2,1);/*字体模式选择*/u8g2_SetFontDirection(u8g2,0);/*字体方向选择*/......
  • 13 总结
    13总结目录13总结思考:区块链中应用保险理赔场景有什么问题?保险理赔速度慢,并不是支付技术问题,主要是因为理赔的内容需要人工审核。区块链做防伪溯源?观点:因为区块链是不可篡改的,在区块链上可以查到有机蔬菜生产的全过程,所以是一个很好的应用场景?问题:技术本身没有什么问......
  • 8.罐子(简单搜索 BFS最短步数+记录方案)
    罐子↑题目链接题目给你两个罐子,容积分别为\(A\)升和\(B\)升。现在,你可以进行如下三种操作:FILL(i),将罐子\(i(1≤i≤2)\)灌满水。DROP(i),将罐子\(i(1≤i≤2)\)清空。POUR(i,j),将罐子\(i\)中的水倒向罐子\(j\),直到罐子\(i\)空了或罐子\(j\)满了为止。请问,至少......
  • 7.洗牌(简单搜索 BFS)
    洗牌↑题目链接题目给定两叠纸牌\(S1\)和\(S2\),每叠恰好有\(C\)张牌。每张牌的尺寸大小都完全相同,但是颜色可能不同。下面介绍洗牌规则。不妨设\(S1\)中纸牌从上到下编号依次为\(a_1,a_2,…,a_C\),\(S_2\)中纸牌从上到下编号依次为\(b_1,b_2,…,b_C\)。洗牌就......
  • 3.抓住那头牛(简单搜索 BFS)
    抓住那头牛↑题目链接题目农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点\(N\),牛位于点\(K\)。农夫有两种移动方式:从\(X\)移动到\(X−1\)或\(X+1\),每次移动花费一分钟从\(X\)移动到\(2∗X\),每次移动花费一分钟假设牛没有意识到农夫的行动,站......
  • 2.地牢大师(简单搜索 BFS)
    地牢大师↑题目链接题目你现在被困在一个三维地牢中,需要找到最快脱离的出路!地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过。向北,向南,向东,向西,向上或向下移动一个单元距离均需要一分钟。你不能沿对角线移动,迷宫边界都是坚硬的岩石,你......
  • 7-013-(LeetCode- 494) 目标和
    1.题目读题 考查点 2.解法思路 代码逻辑 具体实现113.总结......
  • PMP-13-项目相关方和组织机构
    在弱矩阵或是职能型组织中,甚至是没有项目经理名称的,更多的是职能经理在做管理性的工作,在强矩阵或是项目型组织中,项目经理才开始有了全职工作的方式。一、任何能直接或间接影响项目的组织或个人都是项目相关方。二、三种常见的组织结构类型分别是职能型组织结构,矩阵式组织结构和......
  • POJ--1328 Radar Installation(贪心)
    记录0:502023-5-1http://poj.org/problem?id=1328reference:《挑战程序设计竞赛(第2版)》第二章练习题索引p135DescriptionAssumethecoastingisaninfinitestraightline.Landisinonesideofcoasting,seaintheother.Eachsmallislandisapointlocating......
  • 文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题
    八、可以扩展我们的记号到有两个参数n和m的情形,其中的n和m可以按不同速率独立地趋于无穷。对于给定的函数g(n,m),用O(g(n,m))来表示以下函数集:O(g(n,m))={f(n,m):存在正常量c、和,使得对所有n>=n0或m>=m0,有0<=f(n,m)<=cg(n,m)}对Ω(g(n,m))和θ(g(n,m))给出相应的定义。文......