抛硬币问题

每次抛掷硬币正面向上和反面向上的概率是相同的

问题 1 :抛掷硬币 n 次,求连续 k 次正面向上的方案数有多少种 ?

  

  一个比较好想的点子是直接 2^n 枚举,在这其中寻找符合要求的有多少种,复杂度爆表...

  在计算连续 k 次正面向上的方案数可能并不太好算,那么就转换成 用总的方案数减去仅有连续小于 k 次的方案数

  dp[i] 表示 到第 i 个位置仅存在小于连续 k 次正面向上的方案数

  1 . 当 i < k 时, dp[i] = dp[i-1]*2

  2 . 当 i == k 时, dp[i] = 2^k-1;

  3 . 当 i > k 时, dp[i] = dp[i-1]*2 - dp[i-k-1];

代码示例 :

#define ll long long
const ll maxn = 1e6+5;
const ll mod = 1e9+7;

ll n, k;
ll dp[maxn];

void solve() {
    dp[0] = 1;
    ll res = 1;
    for(ll i = 1; i <= n; i++){
        if (i < k) dp[i] = dp[i-1]*2;
        else if (i == k) dp[i] = dp[i-1]*2-1;
        else dp[i] = dp[i-1]*2-dp[i-k-1];
        dp[i] %= mod;
        res *= 2; res %= mod;
    }
    ll ans = (res-dp[n]+mod)%mod;
    printf("%lld\n", ans);
}

int main() {
    while(~scanf("%lld%lld", &n, &k)){
        solve();
    }
    return 0;
}

问题  2 :

如果用抛硬币来举例子,则为假设有一个硬币,抛出背面和正面的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现三次正面为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出三次正面向上游戏就结束了,不用继续抛。

原文地址:https://www.cnblogs.com/ccut-ry/p/9926421.html

时间: 2024-10-10 05:45:42

抛硬币问题的相关文章

抛硬币的两种思维方式

抛硬币是经典统计学中最基础的案例,无论是理论还是实验,都证明了50%这个概率,而且抛的次数越多,越接近这个值. 我们来看看一下这个问答:(以下对话例子来源于塔勒布的<黑天鹅>) A:假设硬币是公平的,因为每次抛出硬币得到正面与反面的可能性都是相同的.我把它抛出了99次,每次都正好得到正面.那么,我下一次得到反面的概率是多大? 回答者1(统计学家):毫无疑问,当然是50%,因为统计学中的样本独立性,不管你前面得到了什么结果,与下一次的结果都无关,所以可能性依然是50%. 好吧,对于学过统计的人,

csu 1009 抛硬币

C - 抛硬币 CSU - 1009 James得到了一堆有趣的硬币,于是决定用这些硬币跟朋友们玩个小游戏.在一个N行M列的表格上,每一个第i行第j列的格子上都放有一枚James的硬币,抛该硬币正面朝上的概率为Pij,所有抛硬币事件两两之间是相互独立的. 现在,玩家在M列硬币中,从每一列里各选择1枚,共M枚,构成一组.如此重复选择N组出来,且保证被选择过的硬币不能再选.选好组之后,每组的M枚硬币各抛一次,如果都是正面朝上,则该组胜利,总分赢得1分:否则该组失败,总分不加也不减.请问,如果让你自行

模拟抛硬币(C语言实现)

实现代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int heads() 5 { 6 return rand() < RAND_MAX/2; 7 } 8 9 int main(int argc, char *argv[]) 10 { 11 int i,j,cnt; 12 int N = atoi(argv[1]), M = atoi(argv[2]); 13 int *f = malloc((N+1)*sizeof(int)

[AH/HNOI2017]抛硬币

题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A 为了劝说小 B 早日脱坑,认真学习,决定以抛硬币的形式让小 B 明白他是一个彻彻底底的非洲人,从而对这个游戏绝望.两个人同时抛 b 次硬币,如果小 A 的正面朝上的次数大于小 B 正面朝上的次数,则小 A 获胜. 但事实上,小 A 也曾经沉迷过拉拉游戏,而且他一次 UR 也没有抽到过,所以他对于自

抛硬币 Flipping Coins(Gym - 101606F)

Here's a jolly and simple game: line up a row of N identical coins, all with the heads facing down onto the table and the tails upwards, and for exactly K times take one of the coins, toss it into the air, and replace it as it lands either heads-up o

【刷题】BZOJ 4830 [Hnoi2017]抛硬币

Description 小A和小B是一对好朋友,他们经常一起愉快的玩耍.最近小B沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到SSR,让他非常怀疑人生.勤勉的小A为了劝说小B早日脱坑,认真学习,决定以抛硬币的形式让小B明白他是一个彻彻底底的非洲人,从而对这个游戏绝望.两个人同时抛b次硬币,如果小A的正面朝上的次数大于小B正面朝上的次数,则小A获胜.但事实上,小A也曾经沉迷过拉拉游戏,而且他一次UR也没有抽到过,所以他对于自己的运气也没有太大把握.所以他决定在小

用随机数列模拟抛硬币

先粘贴上代码 package djbc; import java.util.Random;import java.util.Scanner; public class Lian {public static void main(String[] args) {int i=0,k=0,t=0;  System.out.println("请输入要抛的次数");Scanner scan=new Scanner(System.in);//输入抛硬币的次数t=scan.nextInt();Ran

HZOI20190908模拟40 队长快跑,影魔,抛硬币 题解

题面:https://www.cnblogs.com/Juve/articles/11487699.html 队长快跑: 权值线段树与dp yy的不错 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int MAXN=1e5+5; int n,a[MAXN],b[

抛硬币直到连续2次正面的概率

前两天去面了个试,被一个经典的概率题目(很早以前听过,然而全忘记了)难住了. 一个硬币,抛到head的概率是0.5,需要抛多少次(期望次数)才能连续抛出2次(n次)head? 假设期望次数为N,要连续2次得到head,至少得抛2次.那么要得到连续两次head,会有下面三种情况.1,第一次不是head,2,两次都不是head,3,连续两次是head,则有: N=0.5*(1+N)+0.5*0.5*(1+1+N)+0.5*0.5*2 上式可以解出N=6 要推广到任意连续n次head的情况,应该可以用