zoukankan      html  css  js  c++  java
  • 共线点(2020强智杯)

    题目链接:https://ac.nowcoder.com/acm/contest/9699/I

    题目描述:

    Bobo在平面上画了三条线段 s1,s2 和 s3。其中,线段 si 的左端点是 (ai , yi),右端点是 (bi , yi)。判断是否能找到三个点 p1,p2 和 p3 使得
     · pi 在线段 si 上;
     · p1,p2,p3 三点共线。

    输入描述:

    输入文件包含多组数据,请处理到文件结束。 每组数据的第一行包含 3 个整数 a1,b1,y1.第二行包含 3 个整数 a2,b2 和 y2. 第三行包含 3 个整数 a3,b3 和 y3. · 0 ≤ ai < bi ≤ 109 · 0 ≤ y1 < y2 < y3 ≤ 109 · 数据组数不超过 104

    输出描述:

    对于每组数据,如果存在三点共线,则输出 Yes,否则输出 No 。

    示例:

    输入:
    0 1 0
    0 1 1
    0 1 2
    0 1 0
    1 2 1
    0 1 2
    0 1 0
    2 3 1
    0 1 2
    
    输出:
    Yes
    Yes
    No

    题目分析:

    本题已经保证三条直线y值递增且直线平行x轴。

    所以第二条直线应该在第一条直线和第三条直线围成的矩形区域内,此区域可由两点式(y-y1)/(y2-y1)==(x-x1)/(x2-x1)推导出。

    注意:若要acc本题就不要想太多的测试样例:比如

    1.三条直线不相交且在同意直线上

    2.全为0的情况

    3.y2 - y1为0的情况

    若加上这三条判断就不能acc本题,虽然我觉得完全没有问题!!!(浪费了我将近一个小时)

    源码:

    C++:

    #pragma warning(disable:4996)
    #include<bits/stdc++.h>
    using namespace std;
    inline double judge(double x1, double y1, double x2, double y2, double y3)
    {
        return (y3 - y1) / (y2 - y1) * (x2 - x1) + x1;
    }
    
    int main()
    {
        double a[9];
        int i;
        while (~scanf("%lf", &a[0]))
        {
            bool ans = 0;
            i = 1;
            while (i < 9 && scanf("%lf", &a[i]))
                i++;
            double r1 = judge(a[6], a[8], a[0], a[2], a[5]);
            double r2 = judge(a[7], a[8], a[1], a[2], a[5]);
            if (a[4] >= r1 && a[3] <= r2)
                ans = true;
            cout << (ans ? "Yes" : "No") << endl;
        }
    }
  • 相关阅读:
    PHP加速器 eaccelerator 介绍
    详谈调用winpcap驱动写arp多功能工具
    VS、VC开发工具快捷键
    链表removeHead中的缺陷
    Effective C++ 小笔记:条款36
    Ubuntu grub系统引导菜单错误
    C++ 中的强制类型转换
    Latex WinEdt eps图片显示不出来 dvi pdf
    unsinged int,unsigned long,size_t还是std::size_t?
    privte的析构函数和构造函数
  • 原文地址:https://www.cnblogs.com/zjw1324399/p/14287798.html
Copyright © 2011-2022 走看看