Description
你有n个粘土人,你突然想要其中两个手办的距离尽可能远,但是你只可以交换任意相邻的手办最多x次(你不一定需要操作完x次)
请问这两个手办的最远距离是多少。假设手办a在位置p,手办b在位置q,他们的距离是q-p(q>p)。
每个手办的初始位置为1~n,且每个手办的位置都不相同。
Input
第一行读入整数T(1<=T<=100)
每组数据读入四个整数n,x,a,b(2<=n<=100,0<=x<=100,1<=a,b<=n,a!=b)
分别表示n个粘土人,最多可操作x次,手办a初始位置,手办b初始位置。
Output
每组数据输出一个整数,表示两个手办的最远距离
Sample Input
3
5 1 3 2
100 33 100 1
6 0 2 3
Sample Output
2
99
1
题目分析
没啥好说的,把手办往两端移动就好了
注意一下题目提示的两种特例情况。
贴ac代码
#include<stdio.h>
int main()
{
int T;
scanf("%d",&T);
int n,x,a,b;
int disa,disb;
int i;
for ( i = 1; i <= T; i++)
{
scanf("%d%d%d%d",&n,&x,&a,&b);
int t;
if(a > b)
{
t = a;
a = b;
b = t;
}//设定a比b小,后面好操作
if(x==0)
{//特殊样例提示,不能移动
printf("%d\n",b-a);
}
else if(a==1 && b==n)
{//特殊样例,开始就在两端,不用移动
printf("%d\n",b-a);
}
else
{//dis是distance,思路就是把粘土人放到两边
disa = a-1;
disb = n-b;
if(x >= (disa+disb) )
{//如果可以移到两端
printf("%d\n",n-1);
}
else
{//反正两个都移不到两端,怎么方便怎么减
printf("%d\n",b+x-a);
}
}
}
return 0;
}