冷知识:Y2K就是常说的千年虫。(这题的题意是真的搞,建议语文太差的人不要参与出题)
题目大意
微软公司每个月都可能盈余s元或者亏损d元,但具体是盈余还是亏损不知道。知道的是每连续的五个月统计一次总收入,都是亏损的(不难知道这样的统计一共有八次)。现问在这种条件下一年到头能盈利吗?如果能,找出最大盈利,如果不能就输出"Deficit"。
思路
这题抛开晦涩难懂的题干,其实挺简单的,两位数的数据范围,怎么都能过。有一种做法是统计出所有可能出现的盈亏情况,然后直接对sd判断就行了。
但我本着练算法的原则刷oj,肯定还是采用贪心的思路。
先假设每个月都是盈利的,然后对每个连着的五个月进行判断。如果满足题设的“亏损”条件,就挪到下一个连续的五个月继续判断;如果不满足,就将当前五个月中最后一个不亏损的月份置为亏损,继续上述操作。
代码
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int s, d;
int arr[20];
int calcSum(int pos) {
int res = 0;
for(int i = pos; i < pos + 5; i++)
res += arr[i];
return res;
}
int main() {
while(~scanf("%d%d", &s, &d)) {
d = -d;
for(int i = 0; i < 12; i++) arr[i] = s;
for(int i = 0; i < 8; i++) {
for(int j = 1; j <= 5; j++) {
int sum = calcSum(i);
if(sum >= 0) arr[i + 5 - j] = d;
else break;
}
}
int totSum = 0;
for(int i = 0; i < 12; i++) totSum += arr[i];
if(totSum >= 0) printf("%d\n", totSum);
else puts("Deficit");
}
return 0;
}