zoukankan      html  css  js  c++  java
  • HDU 1495 非常可乐 BFS

    非常可乐
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
     

    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
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <queue>
    #include <vector>
    #include <iomanip>
    #include <math.h>
    #include <map>
    using namespace std;
    #define FIN     freopen("input.txt","r",stdin);
    #define FOUT    freopen("output.txt","w",stdout);
    #define INF     0x3f3f3f3f
    #define INFLL   0x3f3f3f3f3f3f3f
    #define lson    l,m,rt<<1
    #define rson    m+1,r,rt<<1|1
    typedef long long LL;
    
    struct node{
       int ml[3];
       int times;
    };
    
    int cola[3];
    int vis[105][105][105];
    double ave;
    
    queue<node>q;
    
    int bfs(int x,int y,int z){
        while(!q.empty())  {q.pop();}
        node fir;
        fir.ml[0]=x;
        fir.ml[1]=y;
        fir.ml[2]=z;
        fir.times=0;
        q.push(fir);
        while(!q.empty()){
            node p=q.front();
            q.pop();
            for(int i=0;i<3;i++)
                for(int j=0;j<3;j++){
                    if(i==j)  continue;
    
                    node p1;
                    if(p.ml[i]+p.ml[j]<cola[j]){
                        p1.ml[i]=0;
                        p1.ml[j]=p.ml[i]+p.ml[j];
                    }else{
                        p1.ml[i]=p.ml[i]+p.ml[j]-cola[j];
                        p1.ml[j]=cola[j];
                    }
                    for(int ii=0;ii<3;ii++){
                        if(ii==i||ii==j)  continue;
                        p1.ml[ii]=p.ml[ii];
                    }
    
                    if(vis[p1.ml[0]][p1.ml[1]][p1.ml[2]])  continue;
    
                    vis[p1.ml[0]][p1.ml[1]][p1.ml[2]]=1;
                    p1.times=p.times+1;
    
                    q.push(p1);
                    if((p1.ml[0]==ave&&p1.ml[0]==p1.ml[1])||(p1.ml[0]==ave&&p1.ml[0]==p1.ml[2])||(p1.ml[1]==ave&&p1.ml[1]==p1.ml[2])){
                        printf("%d
    ",p1.times);
                        return 0;
    
                    }
    
                }
        }
        printf("NO
    ");
    
    }
    
    
    int main()
    {
        //FIN
        int S,N,M;
        while(~scanf("%d%d%d",&S,&N,&M))
        {
            if(S==0&&N==0&&M==0)  break;
            memset(vis,0,sizeof(vis));
            cola[0]=S;
            cola[1]=N;
            cola[2]=M;
            ave=S/2.0;        //这里一定要/2.0
            bfs(S,0,0);
        }
    }
    

      



  • 相关阅读:
    [01] 异常的概念和处理
    [03] 节点流和处理流
    [02] 输入/输出流 和 字节/字符流
    [01] File类
    Apache的https协议配置
    Apache的虚拟主机配置
    Apahce的虚拟用户认证及server-status页
    Apache配置日志功能
    Apache脚本路径别名(CGI接口)
    Apache配置站点根目录、用户目录及页面访问属性
  • 原文地址:https://www.cnblogs.com/Hyouka/p/5767579.html
Copyright © 2011-2022 走看看