zoukankan      html  css  js  c++  java
  • Uva 4916 Selling Cells(随机算法)

    题意:

    给定n个圆的 坐标 和半径, 求第一个圆与其他圆相交的面积占第一个圆的面积的多大。

    分析:

    如果从局部去想, 处理每个圆之间的关系, 求出他们与第一个圆的交集, 这样可能就会十分复杂了。

    不妨从总体去想, 因为答案要求的数字并不是十分精确(保留两位小数),  那么我们可以试试随机算法,

    想象在第一个圆内撒绿豆, 那么绿豆肯定会落到第一个圆与其他圆相交的区域, 这时候统计一下撒的绿豆和在区域中的绿豆就可以大概算出这个数字了。

    这里有个技巧是用 

    rand() /(double)(RAND_MAX/'num')  生成 0 ~ num 的浮点数 rand()/(double)RAND_MAX 就是生成一个0 ~ 1的浮点数
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 25 + 7;
     4 int n;
     5 
     6 double x[maxn], y[maxn], r[maxn];
     7 
     8 double p2pdis(double x1, double y1, double x2, double y2){
     9     return sqrt((x1-x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    10 }
    11 
    12 int main(){
    13     while(scanf("%d", &n) && n){
    14         for(int i = 0; i < n; i++){
    15             scanf("%lf %lf %lf", &x[i], &y[i], &r[i]);
    16         }
    17         int time = 2e5;//设置最多循环次数, 在不超时的情况下设置的越大越好
    18         int in = 0, tot = 0;
    19         while(time--){
    20             double tx,ty;
    21             tx = x[0] + rand() /(double)(RAND_MAX/ (-2 * r[0])) + r[0]; // 令tx在x的半径内随机
    22             ty = y[0] + rand() /(double)(RAND_MAX/(-2 * r[0]))  + r[0]; // 令ty在y的半径内随机
    23             if(p2pdis(tx,ty,x[0],y[0]) <= r[0]){//此时还要判断一下这个点,是否在圆内, 因为我们是在以圆点为中心的正方形内取点
    24                 tot++;//判断多少个点符合
    25                 for(int i = 1; i < n; i++){
    26                     if(p2pdis(tx,ty,x[i],y[i]) <= r[i]){
    27                         in++;//判断多少个点在小圆内
    28                         break;
    29                     }
    30                 }
    31             }
    32         }
    33         printf("%.2f
    ",(double)in/tot);
    34     }
    35 }
  • 相关阅读:
    Hibernate延迟加载、三种状态、脏检查 缓存
    Hibernate入门案例
    Hibernate入门案例及增删改查
    PasswordHelper 对user对象的password进行加密重设
    shrio 加密/编码
    shrio int配置
    shrio 授权
    JUnit中assertEquals和assertSame方法的不同
    shrio 身份认证流程-Realm
    shrio 登录/退出
  • 原文地址:https://www.cnblogs.com/Jadon97/p/7251823.html
Copyright © 2011-2022 走看看