首页 > 其他 > 详细

HDU 1030 数学题

时间:2014-11-16 18:43:21      阅读:242      评论:0      收藏:0      [点我收藏+]

给出两点,求这两点在图上的最短路径


分别以最上,左下,右下为顶点,看这个三角图形

ans=这三种情况下两点的层数差

#include "stdio.h"
#include "string.h"
#include "math.h"
int main()
{
    int n,m,sn,sm,rn,rm,ln,lm,ans;
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        sn=sqrt(n);
        if (sn*sn!=n) sn++; // 以最上为定点所在的层数
        sm=sqrt(m);
        if (sm*sm!=m) sm++;

        ln=(n-(sn-1)*(sn-1))/2+1+(sm-sn); // 以左下为顶点所在的层数
        lm=(m-(sm-1)*(sm-1))/2+1;

        rn=(sn*sn-n+1)/2+1+(sm-sn); // 以右下为顶点所在的层数
        rm=(sm*sm-m+1)/2+1;

        ans=fabs(sn-sm)+fabs(ln-lm)+fabs(rn-rm);

        printf("%d\n",ans);
    }
    return 0;
}


HDU 1030 数学题

原文:http://blog.csdn.net/u011932355/article/details/41174467

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!