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

    题目链接 

    http://acm.hdu.edu.cn/showproblem.php?pid=1495

    这题搞不出,看了一位牛逼的人的代码思路

    两个杯子按大小排序,为S>M>N,

     
    1.只要n满了,就把n里的东西放到s中
     
    2.只要m非空,就把m中的放到n中
     
    3.如果m为空,把s中的放到m中。
     
    -----------------------------------------------------------------------------------------------------------------
     
    //平分可乐的问题
    //一桶可乐S升,两个杯子M和N升,
    //平分所需的最小次数
     
     
    #include<stdio.h>
     
    int s;
    int a;
    int b;
    int ss;
    int aa;
    int bb;
    int num;
     
    int main()
    {
        while(scanf("%d%d%d",&s,&a,&b)==3&&(s+a+b))
        {
            if(a<b)
            a=a^b^(b=a);
            ss=s;
            aa=0;
            bb=0;
            num=0;
            while(1)
            {
                if(ss==b && aa==a && num>1)//出现了死循环
                {
                    printf("NO ");
                    break;
                }
                if(ss==aa && bb==0)
                {
                    printf("%d ",num);
                    break;
                }
                if(bb==b)
                {
                    ss+=b;
                    bb=0;
                    num++;
                    continue;
                }
                if(aa>0 && aa<=a)
                {
                    if(aa+bb>b)
                    {
                        aa=aa+bb-b;
                        bb=b;
                    }
                    else if(aa+bb<=b)
                    {
                        bb+=aa;
                        aa=0;
                    }
                    num++;
                }
                else if(aa==0||aa>a)
                {
                    if(ss>=a)
                    {
                        ss-=a;
                        aa=a;
                    }
                    else
                    {
                        aa=ss;
                        ss=0;
                    }
                    num++;
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    Postgresql修改序列方法 select setval('dataset_id_seq',1,false);
    再谈Elasticsearch全文搜索:你不知道的query_string、match、term、match_phrase的区别
    crosstab(unknown, unknown) does not exist
    Elasticsearch High Level Rest Client 发起请求的过程分析
    提取经过Jar2Exe编译加密的源代码 教程1
    Unity 协程与线程
    box unboxing(装箱 拆箱) C#编程指南
    C++基础笔记(四)C++内存管理
    C++ 箭头-> 双冒号:: 点号.操作符区别
    ref out 方法参数
  • 原文地址:https://www.cnblogs.com/liudehao/p/4014492.html
Copyright © 2011-2022 走看看