zoukankan      html  css  js  c++  java
  • 【暴力】【几何】Codeforces Round #431 (Div. 2) B. Tell Your World

    B. Tell Your World

    Source

    http://codeforces.com/contest/849/problem/B

    Description

    Connect the countless points with lines, till we reach the faraway yonder.

    There are n points on a coordinate plane, the i-th of which being (i, yi).

    Determine whether it's possible to draw two parallel and non-overlapping lines, such that every point in the set lies on exactly one of them, and each of them passes through at least one point in the set.

    Input

    The first line of input contains a positive integer n (3 ≤ n ≤ 1 000) — the number of points.

    The second line contains n space-separated integers y1, y2, ..., yn ( - 109 ≤ yi ≤ 109) — the vertical coordinates of each point.

    Output

    Output "Yes" (without quotes) if it's possible to fulfill the requirements, and "No" otherwise.

    You can print each letter in any case (upper or lower).

    Examples
    Input
    5
    7 5 8 6 9
    Output
    Yes
    Input
    5
    -1 -2 0 0 -5
    Output
    No
    Input
    5
    5 4 3 2 1
    Output
    No
    Input
    5
    1000000000 0 0 0 0
    Output
    Yes
     
    Note

    In the first example, there are five points: (1, 7), (2, 5), (3, 8), (4, 6) and (5, 9). It's possible to draw a line that passes through points 1, 3, 5, and another one that passes through points 2, 4 and is parallel to the first one.

    In the second example, while it's possible to draw two lines that cover all points, they cannot be made parallel.

    In the third example, it's impossible to satisfy both requirements at the same time.

    Solution

    题意:给一堆点(i, yi),问你能否找出两条平行的直线,使得每个点都被其中一条直线穿过,而且每条直线至少要穿过一个点。

    暴力判断。

    始终把(1, y1)视为第一条直线需要穿过的第一个点,然后枚举第一条直线需要穿过的第二个点,这样就确定了斜率,接着就可以把剩下的也在这条直线上的点都给找出来,然后就只剩下不在这条直线上的,判断一下他们是否共线,并且构成的直线斜率跟第一条直线相同。注意还需要处理一下第一条直线只穿过一个点的情况和所有点都共线的情况。

    为了避免精度误差,不要把斜率算出来。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 typedef long long ll;
     5 int n;
     6 ll y[1011];
     7 vector<int> vec;
     8 
     9 int main(){
    10     ios::sync_with_stdio(false);
    11     cin >> n;
    12     for(int i = 1;i <= n;++i) cin >> y[i];
    13 
    14     if((y[2]-y[1])*(3-1) != (y[3]-y[1])*(2-1)){
    15         for(int j = 4;j <= n;++j)
    16             if((y[3]-y[2])*(j-2) != (y[j]-y[2])*(3-2)) goto HELL;
    17         cout << "Yes";
    18         return 0;
    19         HELL:;
    20     }
    21 
    22     for(int i = 2;i <= n;++i){
    23         vec.clear();
    24         for(int j = 2;j < i;++j) vec.push_back(j);
    25         for(int j = i + 1;j <= n;++j)
    26             if((y[i]-y[1])*(j-1) != (y[j]-y[1])*(i-1)) vec.push_back(j);
    27         if(vec.empty()) break;
    28         if((int)vec.size() >= 2 && (y[i]-y[1])*(vec[1]-vec[0]) != (y[vec[1]]-y[vec[0]])*(i-1)) goto hell;
    29         for(int j = 2;j < vec.size();++j)
    30             if((y[vec[1]]-y[vec[0]])*(vec[j]-vec[0]) != (y[vec[j]]-y[vec[0]])*(vec[1]-vec[0])) goto hell;
    31         cout << "Yes";
    32         return 0;
    33         hell:;
    34     }
    35 
    36     cout << "No";
    37 
    38     return 0;
    39 }
  • 相关阅读:
    centos7安装nginx的两种方法
    centos7 搭建keepalived+Nginx+tomcat
    Linux下Nginx+Tomcat负载均衡和动静分离配置要点
    Tomcat结合Apache、Nginx实现高性能的web服务器
    centos7安装jdk+tomcat+nginx+mysql
    python3 密码生成器
    如何处理Tomcat日志catalina.out日志文件过大的问题
    Tomcat关闭日志catalina.out
    tomcat 启动项目时出现 ZipException: error in opening zip file
    [科普]MinGW vs MinGW-W64及其它(比较有意思,来自mingw吧)
  • 原文地址:https://www.cnblogs.com/doub7e/p/7466313.html
Copyright © 2011-2022 走看看