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
原创粉丝点击