UVALive 6955 Finding Lines

解决在给定点集中寻找足够多的点使它们落在一条直线上,并且这些点的数量占比达到给定概率的问题。通过随机选取两个点并检查其余点是否符合直线分布来实现。

题意:

   问能否在给定的图中,找到足够多的点使其落在一条直线上,这些点的数量除以总数量大于等于给定的概率。


解题:

    是看了别人的做法后,才知道这么做的。随机取2个点,然后判断所有点是否落在直线上,若落在直线上的比例大于等于给定概率则停止,否则继续循环,直至10000次(貌似1000也就够了。)若循环10000次后仍未找到大于概率的情况则输出impossible。(注意特殊处理,N为1或2的情况)


总结:

    感觉思维有些受限,看到那么大的n,而且给定的又是概率,应该往这方面想才对!


代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <cstdlib>
#define maxn 100010
using namespace std;
int storex[maxn],storey[maxn];
int main()
{
	int n,p,tmp1,tmp2,cnt,limit;
	long long x1,y1,x2,y2,difx,dify,dif;
	bool flag;
	double poss;
	srand(time(0));
	while(~scanf("%d%d",&n,&p))
	{
	   flag=false;
	   limit=n*p;
       for(int i=1;i<=n;i++)
	   {
		   scanf("%d%d",&storex[i],&storey[i]);
	   }
	   if(n==1||n==2)
	   {
		   printf("possible\n");
		   continue;
	   }
	   for(int i=1;i<=10000;i++)
	   {
		   cnt=0;
		   tmp1=rand()%n+1;
           while(1)
		   {
             tmp2=rand()%n+1;
			 if(tmp2!=tmp1)break;
		   }
		   x1=storex[tmp1];
		   y1=storey[tmp1];
		   x2=storex[tmp2];
		   y2=storey[tmp2];
		   difx=x1-x2;
		   dify=y1-y2;
		   dif=y2*x1-y1*x2;
		   for(int j=1;j<=n;j++)
		   {
			   if((storey[j]*difx)==(dify*storex[j]+dif))
				   cnt++;
		   }
		   if(100*cnt>=limit)
		   {
			   flag=true;
			   break;
		   }
	   }
	   if(flag)printf("possible\n");
	   else printf("impossible\n");
	}
	return 0;
}


### 关于 Function Finding 数据集 Function Finding 是一种涉及从一组输入和输出中推断潜在函数的任务。尽管没有直接名为 “Function Finding”的标准数据集,但可以利用一些类似的公开可用的数据集来模拟这一过程。 #### 使用 Adult DataSet 模拟功能查找任务 Adult Data Set 可用于构建模型以预测收入是否超过 $50K/年[^2]。虽然该数据集主要用于分类任务,但它也可以被重新设计为一个函数学习问题。例如,可以通过将特征映射到目标变量(income),尝试找到描述两者之间关系的隐含函数。 #### 创建自定义 Function Finding 数据集示例 如果需要更贴近实际的功能发现场景,则可人工生成合成数据作为训练材料: ```python import numpy as np import pandas as pd def generate_function_data(func, num_samples=1000, noise_level=0.1): """Generate synthetic data based on given function.""" X = np.random.uniform(-10, 10, size=(num_samples,)) y_true = func(X) noise = np.random.normal(0, noise_level * abs(y_true.mean()), size=y_true.shape) y_noisy = y_true + noise return pd.DataFrame({'X': X, 'y': y_noisy}) # Example usage with quadratic function f(x) = x^2 data_quad = generate_function_data(lambda x: x ** 2) print(data_quad.head()) ``` 上述代码片段展示了如何基于给定数学表达式创建带噪声的数据样本集合[^4]。这里选取了一个简单的二次方程 \(f(x)=x^{2}\),当然还可以替换其他复杂形式去测试不同类型的算法性能表现。 对于希望进一步探索真实世界应用案例的研究者来说,可能还需要考虑引入更多维度以及非线性变换等因素的影响。 ### 小结 目前并没有专门针对“function finding”命名的标准公共数据库资源可以直接下载;不过借助像Adult Census Income这样的经典机器学习 benchmark datasets经过适当调整后同样能够服务于此类研究目的。另外通过程序化手段自制满足需求特点的人工构造实例也是一种可行方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值