Problem 1257A. Two Rival Students【思维】 原题地址 -点击查看题目题目大意:原题题意可以理解为存在一个从1到n递增的公差为1的等差数列。数列中存在两个不相等的数a和b。我们需要计算出a和b之间的最大差值。令c=abs(a-b),则一共有x次使c加1的机会。我们需要尽可能的使c的值最大。分析:首先考虑当x为0时的情况,当x为0时,由于a绝对不会等于b(题目要求),a与b间的最大距离即为a-b的绝对值。当x不为0时,首先考虑a是否大于b, (也可以用abs(a-b))。其次判断数列最大值与c的差和x相比较的大小。如果x小于前者,则说明c的值在数列的范围内。否则c的值便等于abs(a-b)的差值。 代码如下: #include<bits/stdc++.h> int main(){ int t; int n,x,a,b; int sum; int right,left; int distance; scanf("%d",&t); while(t--){ scanf("%d %d %d %d",&n,&x,&a,&b); if(x==0){//首先令x==0 sum=abs(a-b); }else{//x不等于0的情况 if(a>b){ left=b; right=n-a; distance=left+right; if(distance<=x){ left=1; right=n; sum=right-left; }else{ sum=a-b+x; } }else{ left=a; right=n-b; distance=left+right; if(distance<=x){ left=n; right=1; sum=left-right; }else{ sum=b-a+x; } } } printf("%d\n",sum); } }