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;
    }
         

  • 相关阅读:
    JS截取字符串常用方法详细整理
    学习网址
    MySQL获取指定长度的字符串的函数left(s,n)和right(s,n)
    MySQL中exists与in的使用
    MySQL DATE_FORMAT() 函数
    MySql 中 case when then else end 的用法
    SQL.Mysql中Cast()函数的用法
    MySql中concat函数的用法(链接字符串)
    TZOJ 3711 浪漫自习(最大流)
    TZOJ 1321 Girls and Boys(匈牙利最大独立集)
  • 原文地址:https://www.cnblogs.com/xiohao/p/2745295.html
Copyright © 2011-2022 走看看