zoukankan      html  css  js  c++  java
  • 杭电2073

    此题是一道找规律的问题,只要在找的时候细心一下,轻松ac应该是没问题的!!
    此题的规律不止一个,这里我说一下我解题的规律吧!
    我分了3步来计算!!
    1)如果两个点在一条直线上,那么两点间的坐标满足(x1+y1)==(x2+y2),这时两点间的距
    离是s=s1*fabs(x1-x2);
    2)如果两点不在一条直线上,并且两点在斜率为(-1)的直线上的距离为:
      {  for(i=(x1+y1);i<(x2+y2);i++)
       s=s+sqrt(i*i+(i+1)*(i+1));   }

    3)如果两点不在一条直线上,并且两点在斜率为不为(-1)的直线上的距离为:
       {  for(j=(x1+y1+1);j<(x2+y2);j++)
        s=s+j*s1;  }
    祝你成功ac!!呵呵!
    对了,此题还应该注意一下,由于输入的两个点的大小不确定,应先判断大小,如果不是
    由小到大的顺序,应该先交换一下,这里用到了swap(a,b);函数,在头文件中加入
    #include <algorithm>即可!!

    #include<iostream>
    #include<cmath>
    #include <algorithm>
    using namespace std;
    int main()
    {
     int N,x1,y1,x2,y2,i,j;
     double s,s1=sqrt(2);
     cin>>N;
     getchar();
     while(N--)
     {
      cin>>x1>>y1>>x2>>y2;
       if ((x1+y1)>(x2+y2))
            {
                swap(x1, x2);
                swap(y1, y2);
              }
            if((x1+y1)==(x2+y2))
              s=s1*fabs(x1-x2);
      else
      {
               s=(y1+x2)*s1;
             for(i=(x1+y1);i<(x2+y2);i++)
             s=s+sqrt(i*i+(i+1)*(i+1));
             for(j=(x1+y1+1);j<(x2+y2);j++)
             s=s+j*s1;
      }
             printf("%.3lf\n",s);
     }
             return 0;
    }
         

  • 相关阅读:
    多重背包
    Nginx HTTP负载均衡/反向代理的相关参数测试
    提升磁盘IO性能的几个技巧
    优化HyperV的5个技巧
    Nginx负载均衡
    Linux服务器的优化
    服务器选型事项
    varnish集群
    解决Linux中出现Too many open files
    nginx timeout 配置 全局timeout 局部timeout web timeout
  • 原文地址:https://www.cnblogs.com/xiohao/p/2745295.html
Copyright © 2011-2022 走看看