点击打开链接

这道题难在理解题意,只要理解题意,这道题基本上就没什么难点了

题意:

有一家名为MS的公司,他们连续5个月发布一次公司的盈余状况(所以一年应该发布8次),并且在这一年的每一

个月的盈利和亏损是一个特定的值s和d。(意思是每个月盈利状况是特定的,要么盈利s元,要么亏损d元)。并

且知道没连续5个月发布的盈余状况一定是亏损的。

给你s,d。根据s,d和题目的信息,推出这一年的总盈余状况。并且如果能盈利,那么是这个值最大。如果不能

盈利,输出"Deficit";

设盈利的月份有x月,那么亏损的月份有12-x月,设总盈余为S,  S = x * s + (12 - x)  * d;

所以我们应该在满足每连续5个月亏损的情况下使得x最大。

我的思路就是把12个月分成3份。1~5月,6~10月,11~12个月;在每份都使x最大(贪心)并且满足题中条件;

代码如下:


#include<stdio.h>
/*
59 237
375 743
200000 849694
2500000 8000000
Sample Output
116
28
300612
Deficit
*/ 
int main()
{
	int s , d;
	while(~scanf("%d %d",&s,&d))
	{
		int x1 = (5*d) / (s+d);
		int y1  = 5 - x1;
		if(1 <= x1 && x1 <= 5)
		{
			int S;
			if(x1 == 1)
			{
				S =s * (x1 * 2 + 1) - d * (12 - x1 * 2 - 1);
				
			}
			else
			{
				S = s * (x1 * 2 + 2) - d * (12 - x1 * 2 - 2);
			}
			if(S > 0)
			printf("%d\n", S);
			else
			printf("Deficit\n");
			
			
		}
		else
		printf("Deficit\n");
	}
	
	
	
	
	return 0;
}