SCUT Training 20170913 Problem N

来源:互联网 发布:幕墙下料软件 编辑:程序博客网 时间:2024/06/11 13:54

 原题:http://acm.hdu.edu.cn/showproblem.php?pid=2073


思路:

注意节点的位置并不一定是一前一后,判断前后的方法就是把节点各自xy坐标加起来判断大小即可,每移动一次ans+=sqrt(2)。换行时用勾股定理求即可。


源代码:

#include <cstdio>#include <cmath>int n,a,b,x,y,sum1,sum2;double ans=0;void cal(int a,int b,int x,int y){    int p=a;    int q=b;    while (1)    {        if (p==x&&q==y) break;        if (q==0)        {            q=p+1;            p=0;            ans+=sqrt((q)*(q)+(q-1)*(q-1));        }        else        {            p++;            q--;            ans+=sqrt(2);        }    }    printf("%.3lf\n",ans);}int main(){    scanf("%d",&n);    for (int i=1;i<=n;i++)    {        ans=0;        scanf("%d%d%d%d",&a,&b,&x,&y);        sum1=a+b;        sum2=x+y;        if (sum1>sum2) cal(x,y,a,b); else cal(a,b,x,y);    }}

原创粉丝点击