在一个D维空间,只有整点,点的每个维度的值是0~n-1 。现每秒生成D条线段,第i条线段与第i维度的轴平行。问D条线段的相交期望。

生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平行)为,i!=j时,a1[j]=a2[j],且随机取区间[0,n-1]内的整数。然后a1[i],a2[i]在保证a1[i]<a2[i]的前提下同样随机。

由于D条线段各自跟自己维度的轴平行,我们可以转换成只求第i个维度与第j个维度的相交期望,然后乘以C(2,n)就好了

显然线段[a1,a2]和线段[b1,b2]要有交点,则k!=i&&k!=j时(a1[k]==a2[k],b1[k]==b2[k]这2个是必然有的)必须要有,a1[k]==b1[k]. 这个的概率是1/n

所以k!=i&&k!=j时,概率期望是(1/n).pow(D-2)

下面看k==i的情况,k==j的情况是一样的。k==i的时候a1[k]<a2[k],b1[k]==b2[k].则我们求的是a1[k]<=b1[k]<=a2[k]&&a1[k]<a2[k]的概率。

即,3个随机数a,b,c. 求P(a<=b<=c && a<c).可用一个x轴画图示意。取任意一点b=i(0<=i<=n-1)。满足的有a<i&&c>i和a==i&&c>i和a<i&&c==i。

3种情况数分别是(i-0)*(n-1-i), n-1-i, i-0.

随机取b点位置的方案数是n,选取线段[a,c]的方案数是C(2,n),所以要将所有的相交次数除以这2个方案数,就是相交的期望

所以P(a<=b<=c && a<c) = ∑((1/n)*(1/C(2,n))*(i*(n-1-i)+n-1-i+i)) = 1/(n*C(2,n))*∑(-i*i+(n-1)*i+n-1),  其中0<=i<=n-1

这个化简得到P(a<=b<=c && a<c) = (n+4)/(3*n)

所以线段[a1,a2]和[b1,b2]的相交期望是 P = ( (1/n)^(d-2) ) * ( ( (n+4)/(3*n) )^2 ) = ( (n+4)^2 ) / ( 9*(n^d) )

java大数AC之?还差一步。。。刚刚那个是2个维度的。

所以最后答案应该是C(2,D)*P =  ( D*(D-1)/2 * (N+4)^2 ) / ( 9*(N^D) )

第一次打这样的推公式=。=其实推公式主要是定下来动手慢慢耐心推。。。。

打得我都晕了,好多括号,不知道有没错。。。。

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3
 4 public class Main {
 5     public static void main(String[] agrs){
 6         Scanner scan = new Scanner(System.in);
 7         int n,d;
 8         while(scan.hasNext()){
 9             n=scan.nextInt();
10             d=scan.nextInt();
11             if(d==1){
12                 System.out.println("0");
13                 continue;
14             }
15             BigInteger a = new BigInteger("0");
16             BigInteger b = new BigInteger("0");
17             a = BigInteger.valueOf(d*(d-1)/2).multiply(BigInteger.valueOf(n+4).pow(2));
18             b = BigInteger.valueOf(9).multiply(BigInteger.valueOf(n).pow(d));
19             if(a.equals(b)){
20                 System.out.println("1");
21                 continue;
22             }
23             BigInteger gg = a.gcd(b);
24             a = a.divide(gg);
25             b = b.divide(gg);
26             System.out.print(a);
27             System.out.print("/");
28             System.out.println(b);
29         }
30         scan.close();
31     }
32 }

View Code

转载于:https://www.cnblogs.com/nextbin/p/3868123.html

HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)相关推荐

  1. HDU 4873 ZCC Loves Intersection(可能性)

    HDU 4873 ZCC Loves Intersection 题目链接 题意:d维的.长度为n的块中,每次选d条平行于各条轴的线段,假设有两两相交则点数加1,问每次得到点数的期望是多少 思路:自己推 ...

  2. hdu 4876 ZCC loves cards(暴力)

    题目链接:hdu 4876 ZCC loves cards 题目大意:给出n,k,l,表示有n张牌,每张牌有值.选取当中k张排列成圈,然后在该圈上进行游戏,每次选取m(1≤m≤k)张连续的牌,取牌上值 ...

  3. hdu 4882 ZCC Loves Codefires(数学题+贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4882 ZCC Loves Codefires Time Limit: 2000/1000 MS (Ja ...

  4. HDU 5228 ZCC loves straight flush( BestCoder Round #41)

    题目链接:ZCC loves straight flush 题面: ZCC loves straight flush Time Limit: 2000/1000 MS (Java/Others)    ...

  5. hdu 4043 FXTZ II [ 概率 + Java大数]

    传送门 FXTZ II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  6. HDU 5230 ZCC loves hacking(DP)

    Problem Description Now, a Codefires round is coming to end. ZCC has got C(0≤C≤106) points by solvin ...

  7. HDU 4879 ZCC loves march (并查集,set,map)

    题面以及思路:https://blog.csdn.net/glqac/article/details/38402101 代码: #include <bits/stdc++.h> #defi ...

  8. hdu 5230 ZCC loves hacking

    刚开始滚动数组错了 #include <iostream> #include <algorithm> #include <cstring> #include < ...

  9. 【HDU - 1134 】Game of Connections(JAVA大数加法,卡特兰数)

    题干: This is a small but ancient game. You are supposed to write down the numbers 1, 2, 3, ... , 2n - ...

最新文章

  1. python语言及其应用下载_Python语言及其应用 中文pdf完整版[13MB]
  2. 【干货】你不知道的 Linux 命令使用技巧
  3. 【搜索】$P1092$虫食算
  4. strace调试(Linux Device Driver)
  5. Jquery重新学习之五[操作JSON数据]
  6. 安卓判断服务器返回的状态码,关于服务器返回的十四种常见HTTP状态码详解
  7. 操作虚拟dom模拟react视图渲染
  8. Unity5.x 依赖关系打包 AssetBundle 研究
  9. API功能测试如何实施(转载自测试之道 微信公众号)
  10. 深圳大学计算机与软件学院自考,如何坐公交 或 地铁去深圳的深圳大学南校区计算机与软件学院自考办| Moovit...
  11. avast:中兴手机预装恶意软件 嵌入固件底层
  12. SE5边缘计算盒子学习笔记-week1
  13. 版本管理工具Git记录
  14. Markdown基本语法
  15. ES6最详细/易懂教程
  16. php日程提醒,php日程控件
  17. Diffusion models代码解读:入门与实战
  18. python图片内容识别_TensorFlow从1到2(五)图片内容识别和自然语言语义识别
  19. Oracle小数补零
  20. ADI电路设计电子书课件分享

热门文章

  1. 第10周项目实践 线索二叉树的建立及遍历
  2. Matlab中存储及读取数据
  3. matlab读取/播放视频的函数(1)
  4. 遗传算法(Genetic Algorithm )+C++实现解决TSP问题
  5. C++:顺序表的基本操作(待完善)
  6. 支持向量机ModuleNotFoundError: No module named ‘sklearn.datasets.samples_generator‘
  7. idea调试怎么跳出循环_使用IDEA的Debug调试功能,查看程序的运行过程
  8. You are what you say!
  9. c#根据年份和月份获得本月最后一天
  10. 常用SQL语句优化技巧总结