博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018大都会赛 A Fruit Ninja【随机数】
阅读量:4559 次
发布时间:2019-06-08

本文共 1774 字,大约阅读时间需要 5 分钟。

题目链接:

题意:一个平面里有n个点,问存不存在一条直线上有m个点,满足m >= n*x。

解题思路:0<x<1,且x小数点后只有1位,也就是说10*m > n。假设存在一条直线满足条件,则任意一点在m中的概率>0.1,也就是说理论上随机10个点,一定有一个点在m上。所以随机一个点,遍历与其他点的斜率,斜率相同的点 + 该点本身 >= n * m,则符合条件。

附ac代码:

1 #include 
2 #include
3 using namespace std; 4 typedef long long ll; 5 #define lson l,mid,rt<<1 6 #define rson mid+1,r,rt<<1|1 7 #define lef rt<<1 8 #define rig rt<<1|1 9 const int maxn = 2e5 + 10;10 const ll mod = 998244353;11 const ll inf = 0x3f3f3f3f;12 const double eps = 1e-6;13 struct nod14 {15 double x;16 double y;17 }coo[maxn];18 19 int main()20 {21 int t;22 scanf("%d", &t);23 double x;24 int n;25 while(t--)26 {27 28 scanf("%d %lf", &n, &x);29 for(int i = 1; i <= n; ++i)30 {31 scanf("%lf %lf", &coo[i].x, &coo[i].y);32 }33 int cas = 20;34 while(cas--)35 {36 map
mp;37 int i = rand() % n + 1, j = 1;38 for(j = 1; j <= n; ++j)39 {40 if(i == j)continue;41 double u;42 if(fabs(coo[j].x - coo[i].x) < eps)43 {44 u = inf + 1.0;45 ++mp[u];46 if(mp[u] + 1.0 + eps > n * x) break;47 }48 else49 {50 u = (coo[i].y - coo[j].y) / (coo[i].x - coo[j].x);51 ++mp[u];52 if(mp[u] + 1.0 + eps > n * x) break;53 }54 }55 if(j <= n) break;56 }57 if(cas > 0) puts("Yes");58 else puts("No");59 }60 return 0;61 }
View Code

 

转载于:https://www.cnblogs.com/zmin/p/9543630.html

你可能感兴趣的文章
生产标准线上环境安装配置
查看>>
【hdu4347】The Closest M Points 【KD树模板】
查看>>
WPF Caliburn 学习笔记(四) Message Triggers
查看>>
HDU 1542 Atlantis [离散化 + 扫描线 + 线段树]
查看>>
Android Sensor Test
查看>>
Spring注入方式及注解配置
查看>>
spark ml pipeline构建机器学习任务
查看>>
调试四线电阻式触摸屏驱动的注意点
查看>>
一个好的Java时间工具类DateTime
查看>>
nginx基本配置
查看>>
了解大数据
查看>>
PyCham快捷键使用
查看>>
SQL Server 2008 R2提高DBCC CHECKDB速度的trace flags
查看>>
总结Selenium WebDriver中一些鼠标和键盘事件的使用
查看>>
详细介绍ASP.NET的实用技巧
查看>>
使用配置文件的方式构建数据库连接工具类范例(JDBC)
查看>>
不同寻常的免费之旅
查看>>
hdu1558 几何处理 + 并查集
查看>>
many-to-many双向关联映射
查看>>
修改Android签名证书keystore作为eclipse默认debug签名证书
查看>>