hdu 1495 非常可乐

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

1.只要n满了,就把n里的东西放到s中

2.只要m非空,就把m中的放到n中

3.如果m为空,把s中的放到m中

超时代码

#include<stdio.h>
int n, m, s;


int main()
{
    while(scanf("%d%d%d",&s,&n,&m)!=EOF)
    {
        if(s==0 && n==0 && m==0)
            break;
        if(n<m)
        {
            int i;
            i= m;
            m = n;
            n = i;
        }
        int a, b=n, c=0, sum=1;
        a = s - n;
        while(a)
        {
            if(a==b)
            {
                printf("%d\n",sum);
                break;
            }

            if(c==0)
            {
                b = b - m;
                a = a + m;
                sum += 2;
                if(b>a && b-m<a+m)
                {
                    printf("NO\n");
                    break;
                }
            }
        }
    }
}

未超时代码

#include<stdio.h>


int s;
int a;
int b;
int ss;
int aa;
int bb;
int num;


int main()
{
 int i,j;
 while(1)
 {
  scanf("%d%d%d",&s,&i,&j);
  if(s==0 && i==0 && j==0)
   break;
  ss = s;
  aa = 0;
  bb = 0;
  num = 0;
  a = i>j ? i : j;
  b = i<j ? i : j;
  while(1)
  {
    if(ss==b && aa==a && num>1)//未得到均分
    {
       printf("NO\n");
       break;
    }
    if(ss==aa && bb==0)//得到均分
    {
       printf("%d\n",num);
       break;
    }
    if(bb==b)//若小杯子里装满可乐,将小杯子里的可乐倒入可乐瓶中
    {
       ss += b;
       bb = 0;
       num++;
       continue;
    }
    if(aa>0 && aa<=a)//若大杯子里有可乐
    {
       if(aa>b-bb)//若大杯子里的可乐多余小杯子容积,将可乐倒入小杯子里
       {
           aa -= b-bb;
           bb = b;
       }
       else//若大杯子里的可乐少余小杯子容积,还是将大杯子里的可乐倒入小杯子中
       {
           bb+=aa;
           aa=0;
       }
       num++;
       continue;
    }
    else//若大杯子里无可乐
    {
       if(ss>=a)//若瓶子里的可乐多余大杯子容积,将瓶子里的可乐倒入大杯子中
       {
           ss -=a;
           aa=a;
       }
       else//若瓶子里的可乐少余大杯子容积,还是将瓶子里的可乐倒入大杯子中
       {
           ss=0;
           aa=ss;
       }
       num++;
    }
   }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值