zoukankan      html  css  js  c++  java
  • HDU 4576 Robot(概率dp)

    Robot

    Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)
    Total Submission(s): 5906    Accepted Submission(s): 1754


    Problem Description

    Michael has a telecontrol robot. One day he put the robot on a loop with n cells. The cells are numbered from 1 to n clockwise.



    At first the robot is in cell 1. Then Michael uses a remote control to send m commands to the robot. A command will make the robot walk some distance. Unfortunately the direction part on the remote control is broken, so for every command the robot will chose a direction(clockwise or anticlockwise) randomly with equal possibility, and then walk w cells forward.
    Michael wants to know the possibility of the robot stopping in the cell that cell number >= l and <= r after m commands.
     

    Input

    There are multiple test cases. 
    Each test case contains several lines.
    The first line contains four integers: above mentioned n(1≤n≤200) ,m(0≤m≤1,000,000),l,r(1≤l≤r≤n).
    Then m lines follow, each representing a command. A command is a integer w(1≤w≤100) representing the cell length the robot will walk for this command.  
    The input end with n=0,m=0,l=0,r=0. You should not process this test case.
     

    Output

    For each test case in the input, you should output a line with the expected possibility. Output should be round to 4 digits after decimal points.
     
     

    Sample Input

    3 1 1 2 1 5 2 4 4 1 2 0 0 0 0
     

    Sample Output

    0.5000 0.2500

    分析

    code

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 
     5 using namespace std;
     6 
     7 double f[2][210];
     8 // f[i][j]到第i次操作,位置j上的概率 
     9 
    10 int main() {
    11     
    12     int n,m,l,r;
    13     while (~scanf("%d%d%d%d",&n,&m,&l,&r) && n+m+l+r) {
    14         memset(f,0,sizeof(f));
    15         f[0][1] = 1.0;
    16         int cur = 0;        
    17         for (int w,i=1; i<=m; ++i) {
    18             scanf("%d",&w);
    19             w = w%n;
    20             cur = cur^1;
    21             for (int k=1; k<=n; ++k) {
    22                 f[cur][k] = f[cur^1][k+w>n?k+w-n:k+w]/2.0 + f[cur^1][k-w<1?k-w+n:k-w]/2.0;
    23             }
    24         }
    25         double ans = 0.0;
    26         for (int i=l; i<=r; ++i) ans += f[cur][i];
    27         printf("%.4lf
    ",ans);
    28     }
    29     return 0;    
    30 }
  • 相关阅读:
    H5调用本地摄像头
    zepto和jquery的区别,zepto的不同使用8条小结
    web前端页面性能优化小结
    超赞!聊聊WEB APP、HYBRID APP与NATIVE APP的设计差异
    activemq生产者和消费者的双向通信
    消息队列同步和异步机制
    postman使用教程
    spring boot mybatis sql打印到控制台
    spring boot 整合 mybatis 以及原理
    spring 框架整合mybatis的源码分析
  • 原文地址:https://www.cnblogs.com/mjtcn/p/8582100.html
Copyright © 2011-2022 走看看