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);
        }
    }
    

      



  • 相关阅读:
    php环境配置中各个模块在网站建设中的功能
    PHP+Apache+MySQL+phpMyAdmin在win7系统下的环境配置
    August 17th 2017 Week 33rd Thursday
    August 16th 2017 Week 33rd Wednesday
    August 15th 2017 Week 33rd Tuesday
    August 14th 2017 Week 33rd Monday
    August 13th 2017 Week 33rd Sunday
    August 12th 2017 Week 32nd Saturday
    August 11th 2017 Week 32nd Friday
    August 10th 2017 Week 32nd Thursday
  • 原文地址:https://www.cnblogs.com/Hyouka/p/5767579.html
Copyright © 2011-2022 走看看