POJ2586 Y2K Accounting Bug

题意

说由于千年虫问题,ACM的财务报表又出问题了。(你明明是很强的算法协会,然而你的系统却频出BUG,你究竟是什么人.jpg),现在ACM公司每个月要么赚s元,要么亏d元。而且我们知道每连续5个月(1-5,2-6……)的报表都在亏钱,问ACM可能最多赚多少钱。

Input

两个数字,每月赚钱s或者亏损d。

Output

能够赚的钱ans,或者亏损则打出字符串“Deficit”。

Sample Input

59 237
375 743
200000 849694
2500000 8000000

Sample Output

116
28
300612
Deficit

题解

这个是一道贪心,把亏损月份尽可能往后放;用枚举暴力好像也能过。然而有一种思路是最简单的:
每五个月即然都亏损,那么五个月只有5种情况:
SSSSD,SSSDD,SSDDD,SDDDD,DDDDD。
那么对应的,就只有五种情况(第五种不用想,必不可能赚钱),分类进行讨论就可以解决问题。
SSSSDSSSSDSS
SSSDDSSSDDSS
SSDDDSSDDDSS
SDDDDSDDDDSD
4个if嵌套解决战斗。

提交代码

#include <stdio.h>

void ans(int s , int d){
  int ans = 0;
  if (4*s < d){
    ans = 10*s - 2*d;
    if( ans >= 0 ){
      printf("%d\n",ans);
    }else{
      printf("Deficit\n");
    }
    return;
  }else if(3*s < 2*d){
    ans = 8*s - 4*d;
     if( ans >= 0 ){
      printf("%d\n",ans);
    }else{
      printf("Deficit\n");
    }
    return;
  }else if(2*s < 3*d){
    ans = 6*s - 6*d;
     if( ans >= 0 ){
      printf("%d\n",ans);
    }else{
      printf("Deficit\n");
    }
    return;
  }else if(s < 4*d){
    ans = 3*s - 9*d;
         if( ans >= 0 ){
      printf("%d\n",ans);
    }else{
      printf("Deficit\n");
    }
    return;
  }else{
    printf("Deficit\n");
    return;
  }
}

int main(){
  int s,d;
  while(scanf("%d%d",&s,&d)!=EOF){
    ans(s,d);
  }
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值