计算n个数亦或在一起等于0的概率 其中每个数大于等于0小于等于m

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算n个数亦或在一起等于0的概率 其中每个数大于等于0小于等于m相关的知识,希望对你有一定的参考价值。

比如2XOR3XOR5=(10)2XOR(11)2XOR(101)2=(100)2=4
求n个数亦或在一起等于0的概率 其中每个数大于等于0小于等于m
不好意思是“异或”

参考技术A 首先抛100次硬币所有可能情况为2^100.本题的关键在于计算连续10次以上出现正面的情况数.假设n个硬币出现连续10次以上正面的可能次数为An,现在我们来计算An的递推式.我们把"第一组连续10次以上出现正面的第一个硬币"简称为"第零硬币"如果第零硬币排在第一位,那么可能次数为B1=2^(n-10)如果第零硬币排在第二位,那么可能次数为B2=2^(n-11) (这是由于第一个硬币不能是正面, 否则第零硬币排在第一位而不是 第二位)如果第零硬币排在第三位,那么可能次数为B3=2*2^(n-12)=2^(n-11)同理对于第零硬币排在第2-11位,可能次数都是2^(n-11)如果第零硬币排在第12位,可能次数为B12=2^(n-11)-(A10)*2^(n-21) (这是由于为了保证第零硬币排在第12位,不但要求 第11个硬币是反面,还要求前10个硬币中不出现 10枚连续正面的硬币)同理如果第零硬币排在第m位,可能次数为Bm=2^(n-11)-(A(m-2))*2^(n-m-9)所以有An=B1+B2+...+B(n-9)具体的通项公式建议使用mathematica之类的数学软件,这个我不是很精通.回多云有冰雹同学:“比如第1到10次为正面,第21到30次也为正面的情况,就被重复计算了”如果出现上面的情况,那么这种排列被计算在B1中而不会被计算在B21中因为Bm=2^(n-11)-(A(m-2))*2^(n-m-9),后面一项减法减去了在前面的1-20枚硬币提前出现连续十枚向上的情况。 参考技术B 设2^a>m>2^(a-1)概率是1/(2^a-1)?????????????????????

hdu 1029 Ignatius and the Princess IV

题意:给n(n为奇数)个数,接下来给出n个数,并且其中一个数出现大于等于(n+1)/2次,请输出那个数

分析:数不多,可以map记录每个数的个数,然后迭代器寻找就可以了

      也可以充分利用数大于一半的条件

 

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;


//记得leetcode 上有过这道题
//毕竟数大于一半,充分利用条件
//竟然才和map一样快,看来数不多
int main(){
    int n,m,cnt,x;
    while(~scanf("%d",&n)){
        cnt=0;
        for(int i=0;i<n;i++){
            scanf("%d",&x);
            if(cnt==0){
                cnt++;m=x;
            }
            else if(x==m)cnt++;
            else cnt--;
        }
        cout<<m<<endl;
    }
    return 0;
}
View Code

 

以上是关于计算n个数亦或在一起等于0的概率 其中每个数大于等于0小于等于m的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Beta Round #50 C 数位DP+概率DP

给你一个长度为 n 的数组,其中只有一个数字出现了大于等于 n/2 次,问如何使用优秀的 时空复杂度快速找到这个数字。

Leetcode837_新21点

Python中如何计算list中大于某数的个数?

牛客网在线编程:n个数中出现次数大于等于n/2的数

11:整数的个数