LDU 2018宁夏邀请赛 D. Take Your Seat

朵哈要坐飞机去旅游,出发的时候有包括朵哈在内一共有 n 个人要上飞机。这班飞机有 n 个座位, 第 i 个人的座位号是 i,朵哈的座位号就是 1。 现在 n 个人按照座位号是 1 到 n 的顺序上飞机。但朵哈忘了自己的座位,于是她就等概率随机选一 个位置坐下了。而其余人都记得自己的座位。如果他们中的一个人上飞机后发现自己的位子被占了,则会 在剩下的位置中等概率随机选一个坐下;如果没被占,则会直接坐在自己的位置上。 你需要计算最后一个上飞机的人坐到了自己位置上的概率。 朵哈返程的时候,包括她在内的 m 个人会按照一个随机的座位号顺序上飞机。 Page 2 of 7 本文仅为中文简述!更多相关细节(包括数据规模,样例以及样例说明)请参见原题 这班飞机有 m 个座位,朵哈的座位号还是 1。但是朵哈又一次忘记了自己的座位,且只有她忘记了 自己的座位。现在所有人找座位的规则和出发时完全相同:朵哈或任何一个发现自己座位已经被占了的 人会等概率随机选一个没被占的座位坐下。 你需要计算最后一个上飞机的人坐到了自己位置上的概率。

输入格式

第一行包含一个整数 T,表示测试数据的组数。 接下来 T 行,每行描述一组测试数据,包含两个整数 n 和 m,分别表示出发时和返程时上飞机的人 数。

1

2 3

 输出格式

对于每组测试数据,输出一行信息 "Case #x: y z"(不含引号),其中 x 表示这是第 x 组测试数 据,y 表示出发时最后一个人坐到了自己位置上的概率,z 表示返程时最后一个人坐到了自己位置上的概 率,四舍五入精确到小数点后 6 位,数据保证答案的小数点后第 7 位不是 4 或 5。

Case #1: 0.500000 0.666667

思路:第一种情况下,假设n==1时,概率为1,当n==2时概率为1/2,当n>=3时,假设1号目标坐在了k位置上那么2到k-1都会做好,剩下就是讨论n-k+1的人然后就会得到递推公式fn=(f1+f2+f3+...+fn-1)/n然后发现只要n>=2得出来的结果都是1/2。。。。。。

第二种情况下,1号目标第k个上车那么他前面的前k-1个人都已经坐好了,所以说每个人一上车都不确定是不是可以看成是第一种的情况 所以说fm=(1+1/2*(m-1))/m=(1+m)/2*m;

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main()
{
    int t;
    int n,m;
    int k=1;
    double ans1,ans2;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        if(n==1)
            ans1=1;
        else
            ans1=0.5;
        ans2=(double)(m+1)/(double)(2*m);

        printf("Case #%d: %lf %lf\n",k,ans1,ans2);
        k++;

    }



    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值