图像分析

hicc0305

2019-02-24 15:34:48

Personal

## 题目大意 给出n(n<=900000)个点的坐标,求一条直线,能经过1/3的点,保证有解,只用输出一个解 ### 解法 三分之一。。。 由于期望很高。。我们可以直接rand。。rand出两个点然后进去看一遍有没有到1/3 完全可以过! ``` #include<map> #include<ctime> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; int x[1000000],y[1000000]; inline bool check(int i,int j) { int cnt=0; for(int k=1;k<=n;k++) if((x[i]-x[k])*(y[i]-y[j])==(x[i]-x[j])*(y[i]-y[k])) cnt++; return cnt*3>=n; } int main() { freopen("graph.in","r",stdin); freopen("graph.out","w",stdout); srand(time(NULL)); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]); int k=1; while(k<=1000) { int i=rand()%n+1,j=rand()%n+1; while(i==j) j=rand()%n; if(check(i,j)) {printf("%d %d\n",i,j);return 0;} k++; } return 0; } ```