nyoj 弹球II(数学 模拟)

弹球II

时间限制:1000 ms  |  内存限制:65535 KB

描述

游戏厅里有一种很常见的游戏机,里面有很多根管子有规律地排成许多行。小球从最上面掉下去,碰到管子会等概率地往管子左边或者右边的空隙掉下去。不过在最靠边的小球只会往一边掉(如图,灰色小球只可能掉到右边空隙)。现在已知共2
* n - 1行管子,第i行有Ai个管子,如果i是奇数,那么Ai等于m,如果i是偶数,Ai等于m
- 1。小球从第1行第k个管子右边掉下去,要求小球从最后一行各个出口掉出来的概率。

输入
第一行是一个整数t(1≤t≤50),表示有t组测试数据。

每组数据第一行有两个整数n(1≤n≤100)和m(2≤m≤10),表示有2*n-1行管子,奇数行有m个管子,偶数行有m-1个管子。

第二行是一个整数k(1≤k≤m-1),表示小球从第1行第k个管子右边掉下去。

输出
输出m-1个小数,第i个数表示小球从最后一行第i个出口出来的概率。

每个小数保留小数点后六位,小数与小数之间用一个空格隔开。

样例输入
1
3 3
2
样例输出
0.375000 0.625000
来源
GDUT校赛
上传者

ACM_李如兵

思路: 把弹球版看做一个n*2的图

0  1  2  3  4  5  6  7  8  9

0

1      *      *      *

2
  1

3          *      *

4      2      2

5     *       *      *

6

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<string.h>
using namespace std;
double dp[205][25];

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,m,k;
        cin>>n>>m>>k;
        memset(dp,0,sizeof(dp));
        dp[2][2*k]=1;
        for(int i=2; i<2*n; i++)
        {
            if(i%2==0)//偶数不考虑边界情况
            {
            for(int j=2; j<=2*m-2; j+=2)
                {
                    dp[i+1][j-1]+=dp[i][j];
                    dp[i+1][j+1]+=dp[i][j];
                }
            }
            else//奇数考虑边界
            {
                dp[i+1][2]=dp[i][1]*2;//左边界
                dp[i+1][2*m-2]=dp[i][2*m-1]*2;//右边界
                for(int j=3; j<=2*m-3; j+=2)
                {
                    dp[i+1][j-1]+=dp[i][j];
                    dp[i+1][j+1]+=dp[i][j];
                }

            }
        }
        double sum=0;
        for(int i=2; i<=2*m-2; i+=2)
            sum+=dp[2*n][i];
        for(int i=2; i<=2*m-2; i+=2)
            printf("%.6lf ",dp[2*n][i]/sum);
        printf("\n");
    }
}
时间: 2024-10-07 05:06:58

nyoj 弹球II(数学 模拟)的相关文章

NYOJ 374 弹球II

链接:click here 题意: 游戏厅里有一种很常见的游戏机,里面有很多根管子有规律地排成许多行.小球从最上面掉下去,碰到管子会等概率地往管子左边或者右边的空隙掉下去.不过在最靠边的小球只会往一边掉(如图,灰色小球只可能掉到右边空隙).现在已知共2* n - 1行管子,第i行有Ai个管子,如果i是奇数,那么Ai等于m,如果i是偶数,Ai等于m- 1.小球从第1行第k个管子右边掉下去,要求小球从最后一行各个出口掉出来的概率. 输入 第一行是一个整数t(1≤t≤50),表示有t组测试数据. 每组

HDU 2932 Extraordinarily Tired Students(数学 &amp; 模拟)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2932 Problem Description When a student is too tired, he can't help sleeping in class, even if his favorite teacher is right here in front of him. Imagine you have a class of extraordinarily tired studen

URAL 1762 Search for a Hiding-Place(数学&#183;模拟)

题意  你在一个n*m个白色正方形格子组成的矩形的某个顶点格子  你沿着45度角的方向走  到了边界就改变方向90度  每次经过一个格子都改变他原来的颜(白或灰)  求你走到另一个顶点格子时矩形中有多少格子是灰色的 这题可以用公式也可以直接模拟  模拟就是一直向右移n-1位 每次超过边界就可以把边界向右移m-1位  用cnt记录超过边界的次数 那么每次都会经过cnt个已经走过的格子 (每个格子最多经过2次)  答案也就减去2*cnt    直到刚好到达边界 #include <bits/stdc

hdoj 2183 奇数阶魔方(II) 【模拟】+【规律】

比赛的时候花了一个多小时还是没做出来 分析:观察得到:最中间是(n*n+1)/2, 中间的上面是n*n,下面是1, 左边是n,右面是(n*n+1)-n,而且正对角线是最左上对到最右下端增加(+1),另外一条对角线是最右上到最左下递减(-n) ,其他对角线也是这样的规律. 难点:模拟的时候数据有点杂,很容易搞错,要细心点. 心得:做题的时候要先确定思路是正确的,并且要履好思路之后在敲代码. 代码: #include <cstdio> #include <cstring> int s[

NYOJ 220 (红黑树--模拟)

链接:click here 题意:题目其实很简单,绕一大圈,原来就是叫你输出输出中序遍历,Orz~~~红黑树经过旋转后中序遍历其实是不变的,所以与下面的旋转没有关系~~--- _ --. 思路:直接数组模拟,或用结构体:包含(数据域,左子树,右子树) 代码: #include <iostream> #include <stdio.h> #include <string.h> #include <vector> #include <algorithm&g

nyoj(简单数学)Oh, my Paper!

Oh, my Paper! 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 Give you a piece of paper, n (row) *m (column) to calculate your is Calculated from a diagonal line to another diagonal how many walk method (only upward or downward, left, and right away). 输入 The

nyoj 122-Triangular Sums (数学之读懂求和公式的迭代)

122-Triangular Sums 内存限制:64MB 时间限制:3000ms 特判: No 通过数:5 提交数:7 难度:2 题目描述: The nth Triangular number, T(n) = 1 + - + n, is the sum of the first n integers. It is the number of points in a triangular array with n points on side. For example T(4): X X X X

BZOJ 1696 [Usaco2007 Feb]Building A New Barn新牛舍 数学

题意:链接 方法:数学+模拟 解析: 首先这类问题不是第一次见了,所以直接知道拿x的中位数.y的中位数. 这题就是讨论情况很的烦. 题中有个限制,给出待求和的点不能选取. 所以假设奇数个点,求出x中位数,y中位数. 检验x,y是否存在待求和的点集里,如存在则推断四种情况. 推断的四种情况各自是(x-1,y),(x+1,y),(x,y-1),(x,y+1),次优解一定存在于这四种情况中,这个应该很好理解? 假设不存在于原点集中.则直接求和. 假设偶数个点,则讨论全部x可取值以及y可取值就可以,建议

ACM 入门计划

acm 本文由swellspirit贡献 ACM • I can accept failure. but I can't accept not trying. Life is often compared to a marathon, but I think it is more like being a sprinter; long stretches of hard work punctuated by brief moments in which we are given the oppo