【数学】 HDU 1030 Delta-wave

来源:互联网 发布:网络暴力是什么 编辑:程序博客网 时间:2024/05/18 01:46

点击打开链接


求N->M需要多少步。

计算出 ans=层数差 + 左斜层差 + 右斜层差

#include <cstdio>#include <cstring>#include <cstdlib>#include <string>#include <iostream>#include <algorithm>#include <sstream>#include <cmath>using namespace std;#include <queue>#include <stack>#include <vector>#include <deque>#include <set>#include <map>#define cler(arr, val)    memset(arr, val, sizeof(arr))typedef long long  LL;const int MAXN = 10100;const int MAXM = 11111;const int INF = 0x3f3f3f3f;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int a[5][2];int main(){    int n,m;    while(cin>>n>>m)    {        a[0][0]=ceil(sqrt(n));        a[0][1]=ceil(sqrt(m));        a[1][0]=(n-(a[0][0]-1)*(a[0][0]-1)-1)/2+1;        a[1][1]=(m-(a[0][1]-1)*(a[0][1]-1)-1)/2+1;        a[2][0]=(a[0][0]*a[0][0]-n)/2+1;        a[2][1]=(a[0][1]*a[0][1]-m)/2+1;        int ans=0;//        for(int i=0;i<3;i++)//            printf("%d %d\n",a[i][0],a[i][1]);        for(int i=0;i<3;i++)            ans+=abs(a[i][0]-a[i][1]);        cout<<ans<<endl;    }}


0 0