zoukankan      html  css  js  c++  java
  • [uva11429]Randomness

    记p(i,j)表示第i次随机时,用多少个数对应到第j个事件,特别的,p(i,0)表示转移到下一次随机数的概率,那么即要求$aj/bj=sum_{i=1}^{inf}p(i,j)/R^{i}$,容易发现这就是$aj/bj$的R进制表示,可以求出其中的某一组解
    然后设f(i)表示第i次随机,有多少个数转移到下一个随机,那么有$f(i)=Rf(i-1)-sum_{j=1}^{n}p(i,j)$,由此求出$ans=sum_{i=1}^{inf}f(i)/R^{i}$
    但显然无法做到枚举到inf,所以可以直接取$inf=50$或答案增长不超过1e-10就可以停止了,注意浮点误差

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,m,x,y;
     4 double ans,a[1005];
     5 int main(){
     6     while (scanf("%d%d",&m,&n)!=EOF){
     7         if ((!n)||(!m))return 0;
     8         for(int i=1;i<=n;i++){
     9             scanf("%d%d",&x,&y);
    10             a[i]=1.0*x/y;
    11         }
    12         ans=1;
    13         long long mi=1,sum=0;
    14         while (1){
    15             mi*=m;
    16             sum*=m;
    17             for(int i=1;i<=n;i++){
    18                 x=(int)(a[i]*m);
    19                 a[i]=a[i]*m-x;
    20                 sum+=x;
    21             }
    22             if (1.0*(mi-sum)/mi<1e-10)break;
    23             ans+=1.0*(mi-sum)/mi;
    24         }
    25         printf("%.6f
    ",ans);
    26     }
    27 }
    View Code
  • 相关阅读:
    对坐标点的离散化
    线段树-离散化处理点
    树状数组
    线段树
    dfs
    vector
    go 参数传递的是值还是引用 (转)
    go 数组指针 指针数组
    go 协程
    go 接口实现
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11720410.html
Copyright © 2011-2022 走看看