码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1030 数学题

时间:2017-05-22 11:55:48      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:int   图形   顶点   return   str   ++   name   turn   math   

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


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

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 数学题

标签:int   图形   顶点   return   str   ++   name   turn   math   

原文地址:http://www.cnblogs.com/cxchanpin/p/6888466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!