2017-10-03
原题链接
题目大意:
某公司每个月要么赚s元,要么亏d元,但是它每5个月才报一次帐(一年共报帐8次),每次报账结果都是亏钱。给出若干组s,d,求这一年中该公司最多可能的盈利值,如果不可能盈利,输出”Deficit”。
样例输入:
59 237
375 743
200000 849694
2500000 8000000
样例输出:
116
28
300612
Deficit
思路:
每5个月中都必须有至少1个、最多4个月亏损才可能实现5个月总体亏损但全年盈利,且亏损月应该尽可能少。而且每5个月中的亏损月应该尽可能靠后,这样接下来的5个月里亏损月才能尽可能的少。
在参考题解中,作者直接对最少亏损月数为1,2,3,4,5的情况进行了讨论。
代码:
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int s,d;
while(scanf("%d%d",&s,&d) == 2) {
int min_def; //每5个月中最少亏损月数
for(min_def = 1; min_def < 5; min_def++) {
int tp = (5-min_def)*s - min_def*d;
if(tp < 0) break;
}
int def = 0; //总计最少亏损月数
for(int a = 6-min_def; a <= 12; a += 5)
def += 13-a > min_def?min_def:13-a;
int result = (12-def)*s - def*d;
if(result > 0)
printf("%d\n",result);
else
printf("Deficit\n");
}
return 0;
}