NC14962. Alice和Bob赌糖果
描述
Alice和Bob赌糖果。规则是这样的:Alice从[ l, r]中随机抽一个数,Bob从[ L, R]中随机抽一个数,谁抽的数大谁就赢,输的一方给另一方1颗糖(平局不用给糖),他们会一直赌下去直到有一方没有糖果为止。
Alice有n颗糖果,Bob有m颗糖果,求Alice将Bob的糖果赢完的概率。
输入描述
第一行3个整数n, l, r。
第二行3个整数m, L, R。
输出描述
Alice将Bob糖果赢完的概率,结果保留5位小数。
示例1
输入:
1 1 3 1 1 2
输出:
0.75000
示例2
输入:
0 1 100 1 1 100
输出:
0.00000
C++(g++ 7.5.0) 解法, 执行用时: 9ms, 内存消耗: 1976K, 提交时间: 2022-11-12 16:19:53
#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e6+100; double f[N]; signed main() { int n,l1,l2,r1,r2,m; cin>>n>>l1>>r1>>m>>l2>>r2; int x=0,y=0; for(int i=l1;i<=r1;i++) { for(int j=l2;j<=r2;j++) { if(i>j) x++; else if(i<j) y++; } } f[1]=(double)x/(x+y); for(int i=2;i<n+m;i++) f[i]=(double)x/(x+y-f[i-1]*y); double ans=1; for(int i=n;i<m+n;i++) ans*=f[i]; printf("%.5f\n",ans); return 0; }
C++14(g++5.4) 解法, 执行用时: 8ms, 内存消耗: 412K, 提交时间: 2020-08-15 23:58:10
#include <cstdio> int main() { int n, l, r, m, L, R; scanf("%d%d%d%d%d%d", &n, &l, &r, &m, &L, &R); if (n == 0) { printf("0.00000\n"); return 0; } double p = 0, s = 0; for (int i = l; i <= r; ++i) { for (int j = L; j <= R; ++j) { if (i != j) ++s; if (i > j) ++p; } } p /= s; s = 1; double t = 0; for (int i = 1; i <= n + m - 1; ++i) { t = p / (1 - (1 - p) * t); if (i >= n) s *= t; } printf("%.5lf\n", s); return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 10ms, 内存消耗: 1920K, 提交时间: 2018-02-12 11:42:52
#include<stdio.h> int n,m,l,r,L,R,up,dn,mid; double k[200005],ans=1; int main() { scanf("%d%d%d%d%d%d",&n,&l,&r,&m,&L,&R); for (int i=l;i<=r;i++) for (int j=L;j<=R;j++){dn++;if (j<i) up++;if (j==i) mid++;} k[1]=(up+0.0)/(dn-mid); for (int i=2;i<m+n;i++) k[i]=up/(dn-k[i-1]*(dn-up-mid)-mid); for (int i=n;i<m+n;i++) ans*=k[i]; printf("%.5f",ans); }