ZJNU 2314-Sleepy Cow Herding

题意

三头牛放在一条一维坐标轴上,问使得三头牛坐标为连续的三个数字的最大和最小移动牛的次数。(移动的限制:每次只能移动最边上(最左或者最右)的牛,并且移动完该牛后,该牛不能还是最边上的牛了)

解法

因为3头牛数量比较上,情况也比较少,简单枚举一下特殊情况处理掉

①原本三头牛就是连续的,最大最小次数都是0

②两头连续

​ (1)6 7 9(不连续的那一头与剩下两头最近距离等于2)

​ 只能移动6 到8 的位置上

​ (2)6 7 10(不连续的那一头与剩下两头最近距离等于2)

​ 把6移到8,把7移到9

③三头都不连续(相邻两头之间距离至少为2)

​ (1)相邻两头距离都为2,则最大最小次数都为1(7 9 11)

​ (2)只有两头之间距离为2,剩下两头之间距离大于2,则最小次数为1,最大次数为相邻距离更大的那一个减去一。

​ (3)距离均大于2,则最小次数为2,最大次数为距离大的那一个的距离减去一。

题面

Description

在这里插入图片描述
Input
在这里插入图片描述
Output
在这里插入图片描述
Sample Input

4 7 9

Sample Output

1
2

Hint

The minimum number of moves is 1 — if Farmer John moves the cow in position 4 to position 8, then the cows are at consecutive locations 7, 8, 9. The maximum number of moves is 2. For example, the cow at position 9 could be moved to position 6, then the cow at position 7 could be moved to position 5.

AC代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int a,b,c;
	int mi=-1,ma=2;
	int d1,d2;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b)swap(a,b);
	if(a>c)swap(a,c);
	if(b>c)swap(b,c);
	if(c-b==b-a==1)mi=0,ma=0;
	d1=b-a;
	d2=c-b;
	if(d1>d2)swap(d1,d2);
	if(d1==d2==1)mi=0;
	else if(d1==2&&d2==2)mi=1,ma=1;
	else if(d1==1&&d2==2)mi=1,ma=1;
	else if(d1==2)mi=1,ma=d2-1;
	else mi=2,ma=d2-1;
	printf("%d\n%d\n",mi,ma);
	return 0;
}

代码写的乱七八糟的,见笑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值