本 文 思 路 完 全 来 源 于 本文思路完全来源于 本文思路完全来源于starlet_kiss
− − − − − − − − − − 分 割 线 − − − − − − − − − − − − − \color{Red}{----------分割线-------------} −−−−−−−−−−分割线−−−−−−−−−−−−−
开 始 a , b , x = a b s ( a − b ) 开始a,b,x=abs(a-b) 开始a,b,x=abs(a−b)
现 在 要 求 ± 1 ± 2 ± 3.... ± n = x 现在要求\pm1\pm2\pm3....\pm{n}=x 现在要求±1±2±3....±n=x
一 开 始 我 们 一 直 加 直 到 超 过 x 时 停 下 一开始我们一直加直到\color{Red}{超过x时停下} 一开始我们一直加直到超过x时停下
1 + 2 + 3... + n = x + y ( 刚 好 超 过 了 x , 加 到 了 x + y ) 1+2+3...+n=x+y(刚好超过了x,加到了x+y) 1+2+3...+n=x+y(刚好超过了x,加到了x+y)
Ⅰ . 当 y 为 偶 数 , 那 么 前 面 有 一 次 y 2 我 们 不 加 , 而 是 减 去 它 , 就 得 到 了 x \color{Orange}{Ⅰ.当y为偶数,那么前面有一次\frac{y}{2}我们不加,而是减去它,就得到了x} Ⅰ.当y为偶数,那么前面有一次2y我们不加,而是减去它,就得到了x
这 种 情 况 下 , 只 需 要 操 作 n 次 即 可 ( 一 定 最 优 ) 这种情况下,只需要操作n次即可(一定最优) 这种情况下,只需要操作n次即可(一定最优)
Ⅱ . y 为 奇 数 , 此 时 y 不 能 被 2 整 除 \color{Green}{Ⅱ.y为奇数,此时y不能被2整除} Ⅱ.y为奇数,此时y不能被2整除
那 我 们 就 构 造 出 新 的 y 为 偶 数 那我们就构造出新的y为偶数 那我们就构造出新的y为偶数
Ⅱ . 1. 当 n + 1 为 奇 数 时 Ⅱ.1. \ 当n+1为奇数时 Ⅱ.1. 当n+1为奇数时
1 + 2 + 3... + ( n + 1 ) = x + y ( 此 时 y 被 构 造 成 了 偶 数 ) 1+2+3...+(n+1)=x+y(此时y被构造成了偶数) 1+2+3...+(n+1)=x+y(此时y被构造成了偶数)
那 么 这 时 候 需 要 操 作 n + 1 次 那么这时候需要操作n+1次 那么这时候需要操作n+1次
Ⅱ . 2. 当 n + 1 为 偶 数 , 那 么 n + 2 为 奇 数 Ⅱ.2.\ 当n+1为偶数,那么n+2为奇数 Ⅱ.2. 当n+1为偶数,那么n+2为奇数
1 + 2 + 3... + ( n + 2 ) = x + y ( 此 时 y 被 构 造 成 了 偶 数 ) 1+2+3...+(n+2)=x+y(此时y被构造成了偶数) 1+2+3...+(n+2)=x+y(此时y被构造成了偶数)
那 么 此 时 需 要 操 作 n + 2 次 那么此时需要操作n+2次 那么此时需要操作n+2次
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,m,t;
signed main()
{
cin>>t;
while(t--)
{
cin>>n>>m;
int x=abs(n-m);
int l=0,r=1e6,mid;
while(r>l)
{
mid=(l+r)/2;
if(mid*(mid-1)/2+mid>=x) r=mid;
else l=mid+1;
}
int y=r*(r-1)/2+r-x;
if(y%2==0) cout<<r<<endl;
else if((r+1)%2==1) cout<<r+1<<endl;
else cout<<r+2<<endl;
}
}