题目链接:https://acm.njupt.edu.cn/problem/NOJ2363/editor
解题思路:
高度计算h:平方差向上取整
ceil(sqrt(1.0x))
计算右边r时从右边开始计算
r=(hh-x)/2+1
计算左边l时从左边开始计算:
l=(x-(h-1)*(h-1)-1)/2+1
最后最小移动距离为
三个高度之间的差
#include<iostream>
#include<cstdio>
#include<math.h>
using namespace std;
int n,m;
int t;
int main(){
cin>>t;
while(t--){
cin>>m>>n;
int hm=ceil(sqrt(1.0*m));
int hn=ceil(sqrt(1.0*n));
int lm=(hm*hm-m)/2+1;
int ln=(hn*hn-n)/2+1;
int rm=(m-(hm-1)*(hm-1)-1)/2+1;
int rn=(n-(hn-1)*(hn-1)-1)/2+1;
int ans=abs(hm-hn)+abs(lm-ln)+abs(rm-rn);
cout<<ans<<endl;
}
return 0;
}