F
来源:互联网 发布:mac mini a1176配置 编辑:程序博客网 时间:2024/05/01 13:52
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4967
判断是不是存在有百分之p的点在一条直线上。
嗯,学习了随机化优化的算法。
#include <bits/stdc++.h>using namespace std;const int MAXN=1e5+7;int x[MAXN],y[MAXN];int main(){ int i,j; int n,p; while(~scanf("%d%d",&n,&p)) { int sum; p=ceil(p*n*0.01); for(i=0;i<n;++i)scanf("%d%d",&x[i],&y[i]); if(n<=2) { puts("possible"); continue; } for(i=0;i<1000;++i) { sum=2; int xx=rand()%n; int yy=rand()%n; while(yy==xx)yy=rand()%n; for(j=0;j<n;++j) { if(j==xx||j==yy)continue; if((y[yy]-y[xx])*(x[j]-x[yy])-(x[yy]-x[xx])*(y[j]-y[yy])==0)sum++; if(sum>=p)break; } if(sum>=p)break; } if(sum>=p)puts("possible"); else puts("impossible"); } return 0;}
0 0