题意:

给出N个点,求是否存在一条直线,至少经过N个点中的个点。其中且x为一位小数。

思路:

这道题是随机两个点形成一条直线,这条直线满足条件的概率为,因为在满足条件的直线上的点至少有个,所以某个点在这条直线上的概率为,两个点都在这条直线上的概率为的极端情况为0.01,所以随机几百次就可以了。

代码:

struct point
{
    int x,y;
}p[10010];
int main()
{
    srand(time(0));
    int t,n;
    double k;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%lf",&n,&k);
        for(int i=0;i<n;i++)
            scanf("%d%d",&p[i].x,&p[i].y);
        int sign=0;
        for(int i=0;i<1000;i++)
        {
            int a=rand()%n,b=rand()%n;
            if(a==b)continue;
            int cnt=0;
            for(int i=0;i<n;i++)
                if((p[i].y-p[a].y)*(p[i].x-p[b].x)==(p[i].y-p[b].y)*(p[i].x-p[a].x))
                cnt++;
            if(1.0*cnt>=n*k)
            {
                sign++;
                break;
            }
        }
        if(sign!=0)printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

上海大都会赛F 扫描线 Previous
HDU6331 flyod+dp+分块 Next