localmaxima (数学)

Posted lonelyryan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了localmaxima (数学)相关的知识,希望对你有一定的参考价值。

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 (数学)的主要内容,如果未能解决你的问题,请参考以下文章

text 数学片段

数学上相同的变量 - 一个破坏着色器而不是

谱分析中窗的选取

窗函数介绍

微信小程序代码片段

VSCode自定义代码片段——CSS选择器