zoukankan      html  css  js  c++  java
  • codeforces 961D Pair Of Lines

    题目链接:http://codeforces.com/contest/961/problem/D

    题意:给你n个二维坐标点,xi,yi的绝对值在1e9以内,然后问你能不能用两条直线穿过所有点。可以输出YES,不可以输出NO。

    分析:当n<=4时,我们知道肯定是输出YES的。当n>4时,如果一条之间可以直接穿过所有点,那么就直接输出YES,否则选不共线的三个点,可以确定三条直线。比如选取1,2,3三个点,那么我们以1和2确定一条直线,判断这个n个点,如果有某个点不在这条直线上,我们就让他和3重新构成一条直线。如果这两条直线能穿过所有点,那么久输出YES,如果没能穿过所有点,我们就枚举剩下的情况,分别以1,3和2,3来当初始确定的直线。如果这三种情况都不可以,那么就输出NO。判断点在直线上应该比较简单,这里就不细说了。

    AC代码:

      1 #include<bits/stdc++.h>
      2 
      3 using namespace std;
      4 
      5 struct st{
      6     long long x,y;
      7 }a[100005];
      8 int n;
      9 int judge(int c1,int c2,int c3){
     10     long long x1=a[c2].x-a[c1].x;
     11     long long y1=a[c2].y-a[c1].y;
     12     long long x2=0;
     13     long long y2=0;
     14     long long d=__gcd(x1,y1);
     15     x1/=d;
     16     y1/=d;
     17     if(x1<0){
     18         x1*=-1;
     19         y1*=-1;
     20     }
     21     int ans1=0,ans2=0;
     22     for(int i=1;i<=n;i++){
     23         if(i!=c1&&i!=c2&&i!=c3){
     24             long long x3=a[i].x-a[c1].x;
     25             long long y3=a[i].y-a[c1].y;
     26             long long x4,y4;
     27             if(x2!=0||y2!=0){
     28                 x4=a[i].x-a[c3].x;
     29                 y4=a[i].y-a[c3].y;
     30                 d=__gcd(x4,y4);
     31                 x4/=d;
     32                 y4/=d;
     33                 if(x4<0){
     34                     x4*=-1;
     35                     y4*=-1;
     36                 }
     37             }
     38             d=__gcd(x3,y3);
     39             x3/=d;
     40             y3/=d;
     41             if(x3<0){
     42                 x3*=-1;
     43                 y3*=-1;
     44             }
     45             //cout<<i<<endl;
     46            // cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<" "<<x3<<" "<<y3<<" "<<x4<<" "<<y4<<endl;
     47             if(x3==x1&&y3==y1){
     48                 ans1++;
     49             }
     50             else if(x2==0&&y2==0){
     51                 x2=a[i].x-a[c3].x;
     52                 y2=a[i].y-a[c3].y;
     53                 d=__gcd(x2,y2);
     54                 x2/=d;
     55                 y2/=d;
     56                 if(x2<0){
     57                     x2*=-1;
     58                     y2*=-1;
     59                 }
     60             }
     61             else if(x4==x2&&y4==y2){
     62                 ans2++;
     63             }
     64             else return 0;
     65         }
     66     }
     67     return n;
     68 }
     69 int main(){
     70     ios_base::sync_with_stdio(0);
     71     cin.tie(0);
     72     cin>>n;
     73     for(int i=1;i<=n;i++){
     74         cin>>a[i].x>>a[i].y;
     75     }
     76     if(n<=4){
     77         cout<<"YES"<<endl;
     78         return 0;
     79     }
     80     long long x1,y1,d,ans=-1;
     81     x1=a[2].x-a[1].x;
     82     y1=a[2].y-a[1].y;
     83     d=__gcd(x1,y1);
     84     x1/=d;
     85     y1/=d;
     86     if(x1<0){
     87         x1*=-1;
     88         y1*=-1;
     89     }
     90     for(int i=3;i<=n;i++){
     91          long long x2=a[i].x-a[1].x;
     92          long long y2=a[i].y-a[1].y;
     93          d=__gcd(x2,y2);
     94          x2/=d;
     95          y2/=d;
     96          if(x2<0){
     97             x2*=-1;
     98             y2*=-1;
     99          }
    100          if(x2!=x1||y1!=y2){
    101             ans=i;
    102             break;
    103          }
    104     }
    105     if(ans==-1){
    106         cout<<"YES"<<endl;
    107         return 0;
    108     }
    109     d=-1;
    110     d=judge(1,2,ans);
    111     if(d==n){
    112         cout<<"YES"<<endl;
    113         return 0;
    114     }
    115     d=judge(2,ans,1);
    116     if(d==n){
    117         cout<<"YES"<<endl;
    118         return 0;
    119     }
    120     d=judge(1,ans,2);
    121     if(d==n){
    122         cout<<"YES"<<endl;
    123         return 0;
    124     }
    125     cout<<"NO"<<endl;
    126 return 0;
    127 }
    View Code
  • 相关阅读:
    【转】 web前端基础知识-(五)jQuery
    【转】 web前端基础知识-(四)DOM
    【转】 web前端基础知识-(三)JavaScript基本操作
    【转】 web前端基础知识-(二)CSS基本操作
    【转】 web前端基础知识-(一)html基本操作
    Vue的dom更新机制 & Vue的nextTick
    VUE项目中实现PDF预览
    WebView
    Nginx服务器
    前端存储 --- cookie & localStorage & sessionStorage & Web SQL & IndexDB & Cache Storage
  • 原文地址:https://www.cnblogs.com/ls961006/p/8782688.html
Copyright © 2011-2022 走看看