Uva 4916 Selling Cells(随机算法)
题意:
给定n个圆的 坐标 和半径, 求第一个圆与其他圆相交的面积占第一个圆的面积的多大。
分析:
如果从局部去想, 处理每个圆之间的关系, 求出他们与第一个圆的交集, 这样可能就会十分复杂了。
不妨从总体去想, 因为答案要求的数字并不是十分精确(保留两位小数), 那么我们可以试试随机算法,
想象在第一个圆内撒绿豆, 那么绿豆肯定会落到第一个圆与其他圆相交的区域, 这时候统计一下撒的绿豆和在区域中的绿豆就可以大概算出这个数字了。
这里有个技巧是用
rand() /(double)(RAND_MAX/'num') 生成 0 ~ num 的浮点数 rand()/(double)RAND_MAX 就是生成一个0 ~ 1的浮点数
#include <bits/stdc++.h>
using namespace std;
const int maxn = + ;
int n; double x[maxn], y[maxn], r[maxn]; double p2pdis(double x1, double y1, double x2, double y2){
return sqrt((x1-x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
} int main(){
while(scanf("%d", &n) && n){
for(int i = ; i < n; i++){
scanf("%lf %lf %lf", &x[i], &y[i], &r[i]);
}
int time = 2e5;//设置最多循环次数, 在不超时的情况下设置的越大越好
int in = , tot = ;
while(time--){
double tx,ty;
tx = x[] + rand() /(double)(RAND_MAX/ (- * r[])) + r[]; // 令tx在x的半径内随机
ty = y[] + rand() /(double)(RAND_MAX/(- * r[])) + r[]; // 令ty在y的半径内随机
if(p2pdis(tx,ty,x[],y[]) <= r[]){//此时还要判断一下这个点,是否在圆内, 因为我们是在以圆点为中心的正方形内取点
tot++;//判断多少个点符合
for(int i = ; i < n; i++){
if(p2pdis(tx,ty,x[i],y[i]) <= r[i]){
in++;//判断多少个点在小圆内
break;
}
}
}
}
printf("%.2f\n",(double)in/tot);
}
}
Uva 4916 Selling Cells(随机算法)的更多相关文章
- 微信红包中使用的技术:AA收款+随机算法
除夕夜你领到红包了吗?有的说“我领了好几K!”“我领了几W!” 土豪何其多,苦逼也不少!有的说“我出来工作了,没压岁钱了,还要发红包”.那您有去抢微信红包吗?微信群中抢“新年红包”春节爆红.618微信 ...
- POJ 3318 Matrix Multiplication(随机算法)
题目链接 随机算法使劲水...srand((unsigned)time(0))比srand(NULL)靠谱很多,可能是更加随机. #include <cstdio> #include &l ...
- 抽奖随机算法的技术探讨与C#实现
一.模拟客户需求 1.1 客户A需求:要求每次都按照下图的概率随机,数量不限,每个用户只能抽一次,抽奖结果的分布与抽奖概率近似. 1.2 客户B需求:固定奖项10个,抽奖次数不限,每个用户只能抽一次, ...
- hdu 4712 (随机算法)
第一次听说随机算法,在给的n组数据间随机取两个组比较,当随机次数达到一定量时,答案就出来了. #include<stdio.h> #include<stdlib.h> #inc ...
- 权重随机算法的java实现
一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...
- hdu 4712 Hamming Distance ( 随机算法混过了 )
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- HDU4712+随机算法
随机算法 求n个20位的2进制串的MinDist. Dist:两个串的异或结果中1的个数 /* 随机算法 */ #include<algorithm> #include<iostre ...
- LOJ #2540. 「PKUWC 2018」随机算法(概率dp)
题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...
- java 权重随机算法实现
import java.util.*; /** * 权重随机算法实现 * a b c d 对应权重范围 --- [0,1).[1,3).[3,6).[6,10) */ public class Ran ...
随机推荐
- Luogu P1160队列安排【链表/老文搬家】By cellur925
原文发表于2018-04-15 08:15:09,我的luogu博客qwq. 看到题以后,要求维护一个可在任意位置修改添加删除元素的序列,那么显然我们可以用到链表. 然而本蒟蒻不久前刚刚学会链表.链表 ...
- java 调用动态库打包sdk
java连接c++动态库并生成jar包提供给别人调用 1.需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承 在项目的src目录执行,否则会提示 错误:找不到符号 ja ...
- MoveTo和LineTo函数的意思
这是个画线函数, moveto是移动到某个坐标,lineto是从当前坐标, 移动的某个坐标连接早当前坐标.这两个函数加起来就是画一条直线.
- [Usaco2008 Feb]Eating Together麻烦的聚餐
Description 为了避免餐厅过分拥挤,FJ要求奶牛们分3批就餐.每天晚饭前,奶牛们都会在餐厅前排队入内,按FJ的设想所有第3批就餐的奶牛排在队尾,队伍的前端由设定为第1批就餐的奶牛占据,中间的 ...
- bzoj1572 [Usaco2009 Open]工作安排Job【贪心 堆】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1572 尽管这一题没有看题解,但是耗时还是比本应耗费的时间要长,所以还是写一下,以提升经验 这 ...
- 转: ORA-06508 could not find program unit being called: "DBSNMP.BSLN_INTERNAL
告警日志中出现错误 Sun Jul 28 00:00:00 2013Errors in file /oracle/app/db/diag/rdbms/mis/MIS1/trace/MIS1_j001_ ...
- 1354 选数字 DP背包 + 数学剪枝
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1354&judgeId=187448 其实这题和在若干个数字中,选 ...
- Hadoop 之Pig的安装的与配置之遇到的问题---待解决
1. 前提是hadoop集群已经配置完成并且可以正常启动:以下是我的配置方案: 首先配置vim /etc/hosts 192.168.1.64 xuegod64 192.168.1.65 xuegod ...
- android开发学习——facebook第三方登录,看了你不会后悔
给APP用原生android进行facebook第三方登录. 我们做一件事情,首先得了解其原理,这样才不会迷茫,才知道自己做到什么程度了,心里才会有底. 所以,第一步,了解第三方登录的原理:下面贴一些 ...
- 自动判断手机版和pc版
<html><head><title>欢迎来到手机版</title><script>var ua = navigator.userAgent ...