• HDOJ 1493 QQpet exploratory park



    QQpet exploratory park

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 465    Accepted Submission(s): 244


    Problem Description
    Today, more and more people begin to raise a QQpet. You can get a lot of pleasure from it, although it does not have a real life and it calls for huge patience to take care of it. There is a place called QQpet exploratory park in the world. Every week, you can get a chance to have a joy there for free. The whole park contains 61 grids in a line, numbered from 0 to 60. Ten of them are important grids which will touch off ( 引发 ) an incident when the pet stands on. They are 5, 12, 22, 29, 33, 38, 42, 46, 50 and 55. Your pet is standing on the gird of number 0 in the beginning. You can toss the die ( 掷骰子 ) 10 times. Each time, the pet goes ahead n steps which n is the number from the die ( n ∈{ 1, 2, …, 6 } ). If your RP is great enough( calls RPG for short ), you will get many surprises in the important grids, such as some yuanbao( the money in QQpet world ), an improvement of your pet's ability, and the most attractive gift-package. Now, your task is to calculate the probability(概率) of touching each important grid.

    HDOJ 1493 QQpet exploratory park - qhn999 - 码代码的猿猿

     

    Input
    The first line of the input contains an integer t– determining the number of datasets. Then t lines follows. Each line contains 6 numbers pi, i ∈{ 1, 2, …, 6 }, indicating the probability of getting 1 to 6 after you toss the die every time . p1+ p2+ … + p6 = 1.
     

    Output
    For each test case, output the probability of touching each important grid. accurate up to 1 decimal places. There is a blank line between test cases. See the Sample Output to get the exactly output format.
     

    Sample Input
    20.000 1.000 0.000 0.000 0.000 0.000
    0.500 0.000 0.000 0.000 0.000 0.500
     

    Sample Output
    5: 0.0%
    12: 100.0%
    22: 0.0%
    29: 0.0%
    33: 0.0%
    38: 0.0%
    42: 0.0%
    46: 0.0%
    50: 0.0%
    55: 0.0%

    5: 3.1%
    12: 30.5%
    22: 27.3%
    29: 24.6%
    33: 21.9%
    38: 10.9%
    42: 0.8%
    46: 0.0%
    50: 4.4%
    55: 1.0%
     

    Author
    LL
     

    Source
     

    Recommend
    LL
     

    #include <iostream>
    #include <cstring>
    #include <cstdio>

    using namespace std;

    double p[7];
    double f[11][66];

    void dp()
    {
        for(int k=1;k<=10;k++)
        {
            for(int j=60;j>=1;j--)
            {
                for(int i=1;i<=6;i++)
                {
                    if(j>=i)
                    f[k][j]+=f[k-1][j-i]*p;
                }
            }
        }
    }


    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
            memset(f,0,sizeof(f));
            f[0][0]=1.0;
            for(int i=1;i<=6;i++)
                scanf("%lf",&p);
            dp();
            double ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[5];
            printf("5: %.1lf%%\n",ans*100);
            ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[12];
            printf("12: %.1lf%%\n",ans*100);
            ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[22];
            printf("22: %.1lf%%\n",ans*100);
            ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[29];
            printf("29: %.1lf%%\n",ans*100);
            ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[33];
            printf("33: %.1lf%%\n",ans*100);
            ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[38];
            printf("38: %.1lf%%\n",ans*100);
                    ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[42];
            printf("42: %.1lf%%\n",ans*100);
                    ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[46];
            printf("46: %.1lf%%\n",ans*100);
                    ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[50];
            printf("50: %.1lf%%\n",ans*100);
                    ans=0;
            for(int i=1;i<=10;i++)
                ans+=f[55];
            printf("55: %.1lf%%\n",ans*100);

            if(T)
                putchar(10);
        }

        return 0;
    }



  • 相关阅读:
    进行C# 编写发送邮箱,报错Error: need EHLO and AUTH first !
    vue使jsZip和FileSaver.js打包下载
    基于js或vue项目实现一次批量文件下载功能
    模块
    now 与 down 中的 ow 发音是否一样?
    __time64_t 解决了 2038 年问题,可是没解决 1969年问题
    MagickSetOption(mw, "jpeg:extent", "...kb"); 这个函数有时结果出乎意料
    解决Idea启动Spring Boot很慢的问题
    CAP原理和BASE思想和ACID模型
    java并发编程之Condition
  • 原文地址:https://www.cnblogs.com/CKboss/p/3351023.html
Copyright © 2020-2023  润新知