码迷,mamicode.com
首页 > 其他好文 > 详细

localmaxima (数学)

时间:2018-02-06 11:03:51      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:取值   yam   important   zfs   ddd   cgo   turn   name   综合   

localmaxima(原题为权限题)

Description

给出一个排列,若其中一个数比它前面的数都大,则称为localmaxima数,求一个随机排列中localmaxima数的个数的期望

Input

一个数n,表示排列为1-n的一个随机排列。

Output

一个浮点数表示localmaxima数的个数期望。四舍五入保留8位小数。

Attention

对30%数据n<=10.
对80%数据n<=1000000.
对100%数据n<=2^31-1

Hint

这肯定是道数学题了
期望的拆分
首先回顾期望的求法:
离散型随机变量$x$的取值可以是$$x_{1},x_{2},x_{3}…x_{n}$$取到这些值的概率分别为$$P(x_{1}),P(x_{2}),P(x_{3})…P(x_{n})$$
则$x$取值的期望$$E(x)=x_{1}*P(x_{1})+x_{2}*P(x_{2})+x_{3}*P(x_{3})+…+x_{n}*P(x_{n})$$即$$\sum _{k=1}^{n} x_{k}*P(x_{k})$$
通常情况下我们求期望需要列分布列,但实际上分布列是一个综合统计的产物,不方便我们思考,我们这次换一种思路,我们
我们对

Code
错误代码(逃~~

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<queue>
#define siz 100
using namespace std;
template <class T>
bool read(T &re) {
    re=0;
    int flag=1;
    char c=getchar();
    if(c==‘-‘) flag=-1,c=getchar();
    while(c>=‘0‘&&c<=‘9‘) re=(re<<1)+(re<<3)+c-‘0‘,c=getchar();
    if(c==‘\n‘) return 0;
    re*=flag;
    return 1;
}
int t,n,m,ai,flag;
long long a[siz];
void search(int p,long long data) {
    if(p==n+1) return;
    if(data==((1<<(n+1))-2)) { flag=1; puts("YES"); exit(0);}
    search(p+1,data|a[p]);
    search(p+1,data);
}
int main() {

    read(t); 
    getchar();
    while(t--) {
        flag=0;
        memset(a,0,sizeof(a));
        read(n),read(m);
        for(int i=1;i<=m;++i) 
          while(read(ai)) if(ai>0) a[ai]|=(1<<i); //
        search(1,0);
        if(!flag) puts("NO"); 
        getchar();
    }
    return 0;
}
?

localmaxima (数学)

标签:取值   yam   important   zfs   ddd   cgo   turn   name   综合   

原文地址:https://www.cnblogs.com/LonelyRyan/p/8421196.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!