非常可乐

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3510    Accepted Submission(s): 1440

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

这是一题搜索题,bfs,我的思路是分为A->B , A->C , B->A , B->C , C->B , C->A 六种情况,后面4种情况,要考虑是否溢出,,,仔细一点就不会错了,哈哈

附上我的代码,有什么更好的方法,请多多指教,                                                            ps:原题 http://acm.hdu.edu.cn/showproblem.php?pid=1495

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int visit[][][];
int s,m,n; struct node
{
int x,y,z;
int step;
}; void bfs()
{
queue<node>Q;
node now,next;
now.x=s;
now.y=;
now.z=;
visit[now.x][now.y][now.z]=;
now.step=;
Q.push(now);
while(!Q.empty())
{
now=Q.front();
Q.pop();
if((now.x==s/&&now.x==now.y)||(now.x==s/&&now.x==now.z)||(now.y==s/&&now.y==now.z))//到达评分条件的时候跳出
{
printf("%d\n",now.step);
return ;
}
if(now.x != ) //A->B,A->C
{
if(now.y != n)
{
next.x = now.x - (n - now.y);
next.y = n;
next.z = now.z; if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
if(now.z != m)
{
next.x = now.x - (m - now.z);
next.y = now.y;
next.z = m; if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
}
if(now.y != ) //B->A,B->C
{
next.x = now.x + now.y;
next.y = ;
next.z = now.z; if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
if(now.y < m - now.z)
{
next.x = now.x;
next.y = ;
next.z = now.y + now.z;
if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
else
{
next.x = now.x;
next.y = now.y - (m - now.z);
next.z = m;
if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
}
if(now.z != ) //C->A,C->B
{
next.x = now.x + now.z;
next.y = now.y;
next.z = ;
if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
if(now.z < n - now.y)
{
next.x = now.x;
next.y = now.y + now.z;
next.z = ;
if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
else
{
next.x = now.x;
next.y = n;
next.z = now.z - (n - now.y);
if(!visit[next.x][next.y][next.z])
{
next.step = now.step + ;
Q.push(next);
visit[next.x][next.y][next.z] = ;
}
}
} }
printf("NO\n");
}
int main()
{
while(scanf("%d%d%d",&s,&n,&m)!=EOF&&n||m||s)
{
memset(visit,,sizeof(visit));
if(s%==)//s为奇数是不可能平分的,可优化。
bfs();
else
printf("NO\n");
}
return ;
}

代码有点冗长啊,不过有很多是重复的,求更好的方法!欢迎评论

非常可乐(杭电hdu1495)bfs的更多相关文章

  1. 杭电ACM分类

    杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze ...

  2. 杭电ACM题单

    杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最 ...

  3. 『ACM C++』HDU杭电OJ | 1415 - Jugs (灌水定理引申)

    今天总算开学了,当了班长就是麻烦,明明自己没买书却要带着一波人去领书,那能怎么办呢,只能说我善人心肠哈哈哈,不过我脑子里突然浮起一个念头,大二还要不要继续当这个班委呢,既然已经体验过就可以适当放下了吧 ...

  4. acm入门 杭电1001题 有关溢出的考虑

    最近在尝试做acm试题,刚刚是1001题就把我困住了,这是题目: Problem Description In this problem, your task is to calculate SUM( ...

  5. 杭电acm 1002 大数模板(一)

    从杭电第一题开始A,发现做到1002就不会了,经过几天时间终于A出来了,顺便整理了一下关于大数的东西 其实这是刘汝佳老师在<算法竞赛 经典入门 第二版> 中所讲的模板,代码原封不动写上的, ...

  6. 杭电OJ——1198 Farm Irrigation (并查集)

    畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...

  7. 高手看了,感觉惨不忍睹——关于“【ACM】杭电ACM题一直WA求高手看看代码”

    按 被中科大软件学院二年级研究生 HCOONa 骂为“误人子弟”之后(见:<中科大的那位,敢更不要脸点么?> ),继续“误人子弟”. 问题: 题目:(感谢 王爱学志 网友对题目给出的翻译) ...

  8. C#利用POST实现杭电oj的AC自动机器人,AC率高达50%~~

    暑假集训虽然很快乐,偶尔也会比较枯燥,,这个时候就需要自娱自乐... 然后看hdu的排行榜发现,除了一些是虚拟测评机的账号以外,有几个都是AC自动机器人 然后发现有一位作者是用网页填表然后按钮模拟,, ...

  9. 杭电ACM2076--夹角有多大(题目已修改,注意读题)

    杭电ACM2076--夹角有多大(题目已修改,注意读题) http://acm.hdu.edu.cn/showproblem.php?pid=2076 思路很简单.直接贴代码.过程分析有点耗时间. / ...

随机推荐

  1. 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter

    [源码下载] 背水一战 Windows 10 (52) - 控件(集合类): ItemsControl - 自定义 ItemsControl, 自定义 ContentPresenter 作者:weba ...

  2. java实现点选汉字验证码

    package com.rd.p2p.web; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; im ...

  3. 试着用java实现DNS(一)——DatagramSocket, DatagramPacket, Message

    一般来说,自己编写DNS是没有必要的,目前开源的dns服务软件很多,功能也很强大.但是,有时候又是很有必要的,有着诸多好处.比如说,用于企业内网,简化DNS配置,可以根据企业需求添加新的功能,非常灵活 ...

  4. 机器学习基石笔记:15 Validation

    一.模型选择问题 如何选择? 视觉上 NO 不是所有资料都能可视化;人脑模型复杂度也得算上. 通过Ein NO 容易过拟合;泛化能力差. 通过Etest NO 能保证好的泛化,不过往往没法提前获得测试 ...

  5. 05-创建kubectl-kubeconfig文件

    本文档介绍创建 kubeconfig 文件 下载 kubectl $ wget https://dl.k8s.io/v1.6.0/kubernetes-client-linux-amd64.tar.g ...

  6. 【xsy2272】 与运算 状压dp

    题目大意:给你一个长度为$n$的序列$a$,我们定义$f_i$表示序列$a$前i项一次进行按位与运算后的值. 我们认为一个序列的价值为$\sum_{i=1}^{n}f_i$,现在你要重新排列序列$a$ ...

  7. 用AOP思想改造一个服务器的数据存储

    背景是有一个游戏服务器一直以来都是写SQL的, 后来改过一段时间的redis, 用的是别的员工写的类orm方式将实体类型映射成各种key-value对进行写入, 但是仍有一个缺点就是需要在增\删\改的 ...

  8. (转)Python3之requests模块

    原文:https://www.cnblogs.com/wang-yc/p/5623711.html Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另 ...

  9. 字符、字符串和文本的处理之Char类型

    .Net Framework中处理字符和字符串的主要有以下这么几个类: (1).System.Char类 一基础字符串处理类 (2).System.String类 一处理不可变的字符串(一经创建,字符 ...

  10. 【从0到1学Web前端】CSS定位问题三(相对定位,绝对定位) 分类: HTML+CSS 2015-05-29 23:01 842人阅读 评论(0) 收藏

    引子: 开始的时候我想先要解决一个问题,怎么设置一个div盒子撑满整个屏幕? 看下面的html代码: <body> <div id="father-body"&g ...