UVALive 6955 Finding Lines(随机化优化)题解
2024-08-29 07:30:28
题意:问你是否有一条直线满足这条直线上的点个数与总个数之比不小于p
思路:解法太暴力了,直接随机取两个数,如果能满足条件就输出可以,否则不行。证明一下为什么可以随机化,题目给出可能有P >=20的点在线上,假设最惨的情况P = 20,有100个点,所以我们选一次选不到这条直线的概率为 1 - (20 * 19) / (100 * 99),简单点我们记做0.96,那么两次我们找不到这条线的概率为0.96*0.96……,所以我们随机300次(之前随机100次几率0.1都被撞到了),这样选不到这条线的概率就很小很小了,除非RP不行啊。
代码:
#include<ctime>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
#define ull unsigned long long
using namespace std;
const int maxn = + ;
const int seed = ;
const int MOD = ;
const int INF = 0x3f3f3f3f;
struct node{
int x, y;
}p[maxn];
bool judge(int u, int v,int i){
int x1 = p[u].x - p[i].x, x2 = p[v].x - p[i].x;
int y1 = p[u].y - p[i].y, y2 = p[v].y - p[i].y;
return y1 * x2 == y2 * x1;
}
int main(){
int n, per;
while(~scanf("%d%d", &n, &per)){
per = (int)ceil((double)per / * n);
for(int i = ; i < n; i++){
scanf("%d%d", &p[i].x, &p[i].y);
}
if(n <= ){
printf("possible\n");
continue;
}
srand(time());
int Time = ;
bool flag = false;
while(Time <= ){
int cnt = ;
int u = rand() % n;
int v = rand() % n;
while(v == u) v = rand() % n;
for(int i = ; i < n; i++){
if(i == v || i == u) continue;
if(judge(u, v, i)) cnt++;
if(cnt >= per){
flag = true;
break;
}
}
if(flag) break;
Time++;
}
if(flag)
printf("possible\n");
else
printf("impossible\n");
}
return ;
}
最新文章
- Sql Server系列:嵌套查询
- WordPress访问打开速度很慢的几种解决方法
- 【bzoj1014】 JSOI2008—火星人prefix
- php递归无限极分类实例
- Leetcode 107 Binary Tree Level Order Traversal II 二叉树+BFS
- 如何查看mac系统是32位还是64位的操作系统
- JavaScript生成GUID的多种算法小结
- c++ 12
- 64位平台支持大于2 GB大小的数组
- Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)
- kali切换字符界面模式和切换图形界面模式
- iOS 轻击、触摸和手势的检测
- [UE4]线性插值Lerp
- 前端-----css(1)
- FastCGI sent in stderr: ";PHP Warning: simplexml_load_string(): Entity: line 1: parser error : Start tag expected, &#39;&;lt;&#39; not found in
- 去除外显子低质量reads时弹出错误“Invalid quality score value (char &#39;#&#39; ord 35 quality value -29) on line 4”和“Invalid quality score value (char &#39;.&#39; ord 46 quality value -18) on line 12”的解决方法
- 2018面向对象程序设计(Java)第3周学习指导及要求
- JQuery 获得元素的方法
- Ubuntu16.04安装Nessus和MSF
- 转载《spring定时任务轮询(spring Task)》
热门文章
- LeetCode - Duplicate Emails
- Android长截屏-- ScrollView,ListView及RecyclerView截屏
- 【黑金ZYNQ7000系列原创视频教程】07.自定义IP&mdash;&mdash;定制RTC IP实验
- gradle多项目构建及依赖
- java 中的&; &;&;区别以及 C++ 中&; &;&;的区别
- Oracle管理监控之Oracle数据库存储空间监控
- Windows中的DNS服务——正向解析&;反向解析配置 分类: AD域 Windows服务 2015-07-16 20:21 19人阅读 评论(0) 收藏
- OpenPGP协议的一个JavaScript实现:OpenPGP.js
- rbac - 界面、权限
- django 多数据分库