操作

 

 

 

 先假设a+t=b+l

那么是不是可以推出

abs(a-b)+t=b+l 设a-b 为x

所以我们现在只需要考虑 (a-b, 0) 的问题怎么解决。与其思考怎么把 1, 2, · · · , k
这 k 个数字分配到两边,不如考虑先把 k 个数字全部加到 0 那儿去再取一些回
来。
把k个数全都加到0上面后0变成了(k-1)*k/2设其为s
如果 s < (a-b)就接着加,否则就考虑把加到 s 里的数字挪一些过去给 (a-b)。
重点来了,挪数字是不会改变s-x的奇偶性辣么可以发现s-x为奇数时无解,
s − x 是偶数时,显然将 (s−x)/2挪过去就可以了。
总结: 那么直接一路加 1, 2, 3, · · · ,直到发现 s ≥ x 且 s−x 是偶数的时候输出加的次数即可。
别忘了加a==b的特判。
代码
#include<bits/stdc++.h>
#define io ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
int main()
{
    io;
    int t;
    cin>>t;
    while(t--)
    {
        int a,b;
        cin>>a>>b;
        int x=max(a,b)-min(a,b);
        if(x==0) printf("0\n");
        else
        {
            int t1=0;
            for(int i=1;i>=0;i++)
            {
                t1+=i;
                if(t1>=x&&(t1-x)%2==0)
                {
                    printf("%d\n",i);
                    break;
                }
            }
        }
    }
    return 0;
}

 

posted @ 2023-04-08 10:15  王浩泽  阅读(52)  评论(0编辑  收藏  举报