【CF1257A】Two Rival Students【思维】

题意:给你n个人和两个尖子生a,b,你可以操作k次,每次操作交换相邻两个人的位置,求问操作k次以内使得ab两人距离最远是多少

题解:贪心尽可能的将两人往两边移动,总结一下就是min(n-1,|a-b|+x)

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int T;
int n,m,a,b;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
      scanf("%d%d%d%d",&n,&m,&a,&b);
      if(a>b)swap(a,b);
      int t=min(a-1,m);
      a-=t;m-=t;
      t=min(n-b,m);
      b+=t;m-=t;
      printf("%d
",b-a);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/worcher/p/11865075.html