冷知识: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; }
评论
还没有任何评论,你来说两句吧!