codeforces 732C 377C

数学乱搞题,我的思路就是一共三种情况,6种大小关系讨论一下。

其中多余的天书我怎么来处理?其实不难,就是我们这么想,我们让多余的天数单独出去,比如早上的,我们可以最后一天吃完早饭然后走了,或者晚上的话,我们可以提前一下。

说明,这道题目没有取得ac,代码尚在改进,但是我觉得思路不存在问题,所以我们这题先放着,明天早晨来解决一下。

事实证明,那种分6种情况,是一种愚蠢的做法

思考,无论哪种情况多,我们都可以有方法平衡,所以情况都是一样,我们只要求一个最大值,然后逐个比较就好(比如早上和晚上多,就是早上走,晚上来)

正确的思路

#include <stdio.h>
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
	ll b, s, d;
	while(scanf("%lld%lld%lld", &b, &s, &d) != EOF)
	{
		ll maxx = max(max(b, s),d);
		ll ans = 0;
		if(b < maxx)
			ans += maxx - b - 1;
		if(s < maxx)
			ans += maxx - s - 1;
		if(d < maxx)
			ans += maxx - d - 1;
		printf("%lld\n",ans);
	}
	return 0;
}

 错误的代码(仅供参考)

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

typedef long long ll;
int main()
{
	ll b,s,d;
	while(scanf("%lld%lld%lld", &b, &s, &d) != EOF)
	{
		if(b >= s && s >= d)
		{
			//原则是所有都尽可能接近,由于d最小,我们不妨先是d个完整周期
			ll b1 = b - d;
			ll s1 = s - d;
			if(b1 == 0)
				printf("%lld\n", b1);
			else if(b1 != 0)
			{
				b1 = b1 - 1;
				if(s1 != 0 && s1 != 1)
					s1 = s1 - 1;
				printf("%lld\n", b1 - s1 + b1);
			}
		}

		else if(b >= d && d >= s)
		{
			//同理,不妨是s个周期
			ll b1 = b - s;
			ll d1 = d - s;
			if(b1 == 0)
				printf("%lld\n", b1);
			else if(b1 != 0 )
			{
				b1 = b1 - 1;
				if(d1 != 0 && d1 != 1)
					d1 = d1 - 1;
				printf("%lld\n",b1 - d1 + b1);
			}
			
		}

		else if(s >= b && b >= d)
		{
			ll s1 = s - d;
			ll b1 = b - d;
			if(s1 == 0)
				printf("%lld\n", s1);
			else if(s1 != 0 )
			{
				s1 = s1 - 1;
				b1 = b1 - 1;
				printf("%lld\n", s1 - b1 + s1);
			}
		}

		else if(s >= d && d >= b)
		{
			ll s1 = s - b;
			ll d1 = d - b;
			if(s1 == 0)
				printf("%lld\n", s1);
			else
			{
				s1 = s1 - 1;
				d1 = d1 - 1;
				printf("%lld\n", s1 - d1 + s1);
			}
		}

		else if(d >= b && b >= s)
		{
			ll d1 = d - s;
			ll b1 = b - s;
			if(d1 == 0)
				printf("%lld\n", d1);
			else
			{
				d1 = d1 - 1;
				if(b1 != 0 && b1 != 1)
					b1 = b1 - 1;
				printf("%lld\n", d1 - b1 + d1);
			}
		}

		else if(d >= s && s >= b)
		{
			ll d1 = d - b;
			ll s1 = s - b;
			if(d1 == 0)
				printf("0\n");
			else
			{
				d1 = d1 - 1;
				if(s1 != 0 && s1 != 1)
					s1 = s1 - 1;
				printf("%lld\n", d1 - s1 + d1);
			}
		}
	}
	return 0;
}

  

 

posted @ 2016-10-26 20:31  fzfn5049  阅读(205)  评论(0编辑  收藏  举报