abc422_e题解
随机选取两个点,则这两个点过所求直线的概率,即这两个点在直线经过的点集
#include<bits/stdc++.h>
using namespace std;
#define int long long
int N,x[514514],y[514514];
void check(int i,int j){
int a=y[j]-y[i],b=x[i]-x[j],c=x[j]*y[i]-x[i]*y[j],cnt=0;
for(int _=1;_<=N;_++)if(a*x[_]+b*y[_]+c==0)cnt++;
if(cnt>=N/2+1)cout<<"Yes\n"<<a<<' '<<b<<' '<<c,exit(0);
}
signed main(){
mt19937 rnd(time(0));
cin>>N;for(int i=1;i<=N;i++)cin>>x[i]>>y[i];
for(int _=0;_<50;_++){
int i=rnd()%N+1,j=rnd()%N+1;if(j==i)j=(i)%N+1;
check(i,j);
}cout<<"No";
return 0;
}