题意:
给出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 协议 ,转载请注明出处!