• A Dangerous Maze LightOJ


    这题意真是...

    题意:你在一个迷宫里,有一些门,每个门有一个参数x,如果为正表明你进入门后可以花x的时间出去,如果为负表明你进入门后可以花-x的时间回到出发的地方。每次回到出发的地方之后,不能记得之前的操作,因此每次你到这个地方,选择每个门的概率都是相等的。求出去的期望时间。

    方法:

    解一个期望方程即可。

    走每个门概率都是1/n。设期望时间为t,对于某个门,设参数为x,如果x为正的,那么走这个门出去的期望时间是x,对总期望的贡献是1/n*x;如果x是负的,那么走这个门之后出去的期望时间就是在这个门里面浪费的时间(-x)再加上t,对总期望的贡献就是1/n*(t-x)。那么就可以列出方程,手算一下就行。

    例如:
    3个门,参数分别为3,-6,-9
    1/3*3+1/3*(x+6)+1/3*(x+9)=x
    1/3*3+1/3*x+1/3*6+1/3*x+1/3*9=x
    (1-1/3*2)x=1/3*(3+6+9)
    x=18

    3个门,参数分别为3,-30,-60
    3 -30 -60
    1/3*3+1/3*(x+30)+1/3*(x+60)=x
    x=91

    2个门,参数分别为-30,-60
    1/2*(x+30)+1/2*(x+60)=x
    x=inf

    那么,设a2为负值的数量,a1为所有参数绝对值之和
    1/n*a1=(1-1/n*a2)x
    a1/n=(1-a2/n)x
    x=a1/n/(1-a2/n)=a1/(n*(1-a2/n))=a1/(n-a2)

    解完方程之后就很简单了...用奇怪的方法算一下a1和a2就行...

    错误记录(本地):题意杀,把题意当成了“如果是正的,在开始的x分钟不能出去,之后就能出去;如果是负的,则相反”

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 int n,a1,a2,a3,T,TT;
     5 int main()
     6 {
     7     int i,t;
     8     scanf("%d",&T);
     9     for(TT=1;TT<=T;TT++)
    10     {
    11         scanf("%d",&n);
    12         a1=a2=0;
    13         for(i=1;i<=n;i++)
    14         {
    15             scanf("%d",&t);
    16             if(t<0)
    17                 a2++,a1-=t;
    18             else
    19                 a1+=t;
    20         }
    21         if(a2==n)
    22         {
    23             printf("Case %d: inf
    ",TT);
    24             continue;
    25         }
    26         a2=n-a2;
    27         a3=__gcd(a1,a2);
    28         printf("Case %d: %d/%d
    ",TT,a1/a3,a2/a3);
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    rabbitmq线上服务器与项目结合的问题总结
    关于RabbitMQ Queue Argument的简介
    rabbitmq代码配置
    python基础篇17-虚环境
    Java-实体与集合转换
    Java-精确计算工具类
    Java-汉字繁体拼音转换
    Java-集合条件筛选
    Java-发邮件
    Java-MD5
  • 原文地址:https://www.cnblogs.com/hehe54321/p/loj-1027.html
Copyright © 2020-2023  润新知