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