zoukankan      html  css  js  c++  java
  • HDU 4576 Robot

    Robot

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


    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
     
    Source
     

     解题:dp。。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <climits>
     7 #include <vector>
     8 #include <queue>
     9 #include <cstdlib>
    10 #include <string>
    11 #include <set>
    12 #include <stack>
    13 #define LL long long
    14 #define pii pair<int,int>
    15 #define INF 0x3f3f3f3f
    16 using namespace std;
    17 double dp[2][210];
    18 int main() {
    19     int n,m,l,r,tmp,i,cur;
    20     double ans = 0.0;
    21     while(scanf("%d %d %d %d",&n,&m,&l,&r),n||m||l||r){
    22         dp[0][0] = 1;
    23         for(int i = 1; i < n; i++) dp[0][i] = 0;
    24         cur = 0;
    25         while(m--){
    26             scanf("%d",&tmp);
    27             for(i = 0; i < n; i++)
    28                 dp[cur^1][i] = 0.5*dp[cur][(i-tmp+n)%n] + 0.5*dp[cur][(i+tmp)%n];
    29             cur ^= 1;
    30         }
    31         ans = 0;
    32         for(i = l-1; i < r; i++)
    33             ans += dp[cur][i];
    34         printf("%.4f
    ",ans);
    35     }
    36     return 0;
    37 }
    View Code
  • 相关阅读:
    luogu P3834 【模板】可持久化线段树 1(主席树) 查询区间 [l, r] 内的第 k 小/大值
    覆盖的面积 HDU
    Picture POJ
    Atlantis HDU
    Transformation HDU
    Tunnel Warfare HDU
    Agri-Net POJ
    Conscription POJ
    Brush (IV) LightOJ
    Throwing Dice LightOJ
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3949054.html
Copyright © 2011-2022 走看看