码迷,mamicode.com
首页 > 其他好文 > 详细

Pair Of Lines Codeforces 961D (随机)

时间:2018-04-05 22:33:06      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:target   连线   end   错误   air   include   pair   targe   string   

传送门

题意:给你n个点,问能不能找两条直线经过所有点

题解:打比赛的时候很傻逼的认为要确定一条一条直线必须要斜率和截距,但是我tm是在枚举与点i的连线啊啊啊啊,点i是固定的所以只要斜率相等就能判断是不是同一条直线。随机算法随机找两个点确定一条直线,如果枚举的点不在该直线上则将它加入到vector中,如果不在点上的直线超过1个,则以vector中的第一个点和第二点作为第二条直线,枚举vector中的点,如果某一点仍然不在第二条直线上,则直接说明该选点不成立,继续随机。如果随机时间超过1.7s仍然没有跑出yes则直接判断他是错误的。 

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
#include <cstring>
#include <iomanip>
#include <set>
#include<ctime>
//CLOCKS_PER_SEC
#define se second
#define fi first
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define Pii pair<int,int>
#define Pli pair<ll,int>
#define ull unsigned long long
#define pb push_back
#define fio ios::sync_with_stdio(false);cin.tie(0)
const double Pi=3.14159265;
const double e=2.71828182;
const int N=1e5+5;
const ull base=163;
const int INF=0x3f3f3f3f;
using namespace std;
pair<ll,ll>p[N];
vector<ll>vec;
bool same(int i,int j,int k){
    return (p[j].fi-p[i].fi)*(p[k].se-p[i].se)-(p[k].fi-p[i].fi)*(p[j].se-p[i].se);
}
int main(){
    fio;
    srand(time(0));
    ll n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>p[i].fi>>p[i].se;
    if(n<=4)return cout<<"YES\n",0;
    while(clock()<1.7*CLOCKS_PER_SEC){
        ll t1,t2;
        do{
            t1=rand()%n;
            t1=(t1*RAND_MAX+rand())%n;
            t2=rand()%n;
            t2=(t2*RAND_MAX+rand())%n;
        }while(t1==t2);
        //cout<<t1<<"  "<<t2<<endl;
        for(int i=0;i<n;i++){
            if(same(t1,t2,i))vec.pb(i);
        }
        if(vec.size()<=1)return cout<<"YES\n",0;
        else {
            int x=vec[0];
            int y=vec[1];
            int i;
            for( i=0;i<vec.size();i++){
                if(same(x,y,vec[i]))break;
            }
            if(i==vec.size())return cout<<"YES\n",0;
            vec.clear();
        }
    }
    cout<<"NO\n";
    return 0;
}

 

Pair Of Lines Codeforces 961D (随机)

标签:target   连线   end   错误   air   include   pair   targe   string   

原文地址:https://www.cnblogs.com/Mrleon/p/8724535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!