【概率&数学期望】A Dangerous Maze LightOJ - 1027

梦里梦外; 2022-06-06 01:52 278阅读 0赞

Think:
1知识点:概率&数学期望
2题意:
(1):T组测试数据
(2):每组测试数据,n扇门,每扇门对应一个xi,等概率进入任意一扇门,若进入门的xi为正,则xi秒之后离开迷宫,若进入们的xi为负,则xi秒之后返回初始点
(3):询问离开迷宫的数学期望
(4):输出格式:测试数据 期望值最简分子/期望值最简分母
3解题思路:
(1)xi > 0: d1 = (1/n) * (x1+x2+…+xu)
(2)xi < 0: d2 = (1/n) * (abs(y1)+abs(y2)+…+abs(yv) + v*d)
即d = d1 + d2 = (1/n) * (x1+x2+…+xu) +(abs(y1)+abs(y2)+…+abs(yv) + v*d)
即(n-v) * d = x1 + x2 + … + xu + abs(y1) + abs(y2) + … + abs(yv)
即:
若v == n 则 d = inf
除此之外:
sum = x1 + x2 + … + xu + abs(y1) + abs(y2) + … + abs(yv)
t = gcd(sum, n-v)
d = p/q
p = sum/gcd(sum, n-v)
q = (n-v)/gcd(sum, n-v)

vjudge题目链接
建议参考博客——题意分析

以下为Accepted代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. #include <cmath>
  5. using namespace std;
  6. int gcd(int x, int y);
  7. int main(){
  8. int cas = 1, T, n, m, sum, i, x;
  9. scanf("%d", &T);
  10. while(T--){
  11. scanf("%d", &n);
  12. m = 0, sum = 0;
  13. for(i = 0; i < n; i++){
  14. scanf("%d", &x);
  15. if(x > 0) sum += x;
  16. else {
  17. sum += -x;
  18. m++;
  19. }
  20. }
  21. if(m == n){
  22. printf("Case %d: inf\n", cas++);
  23. }
  24. else {
  25. int t = gcd(sum, n-m);
  26. printf("Case %d: %d/%d\n", cas++, sum/t, (n-m)/t);
  27. }
  28. }
  29. return 0;
  30. }
  31. int gcd(int x, int y){
  32. if(!y) return x;
  33. else return gcd(y, x%y);
  34. }

发表评论

表情:
评论列表 (有 0 条评论,278人围观)

还没有评论,来说两句吧...

相关阅读