zoukankan      html  css  js  c++  java
  • 【推导】【数学期望】Gym

    按照回文子串的奇偶分类讨论,分别计算其对答案的贡献,然后奇偶分别进行求和。

    推导出来,化简一下……发现奇数也好,偶数也好,都可以拆成一个等比数列求和,以及一个可以错位相减的数列求和。

    然后用高中数学知识搞一下就行了。

    #include<cstdio>
    #include<iostream>
    using namespace std;
    typedef long long ll;
    int N;
    double K;
    double Quick_Pow(double x,int p){
    	if(!p){
    		return 1;
    	}
    	double ans=Quick_Pow(x,p>>1);
    	ans=ans*ans;
    	if(p&1){
    		ans=ans*x;
    	}
    	return ans;
    }
    int main(){
    //	freopen("c.in","r ",stdin);
    	while(scanf("%d%lf",&N,&K)!=EOF){
    		if(K==1){
    			cout<<(ll)(N+1)*(ll)N/2ll<<endl;
    		}
    		else{
    			double a=(double)(2+N)*(1-Quick_Pow(1/K,(N+1)/2))/(1-(1/K));
    			double b=-2.0*(1-Quick_Pow(1/K,(N+1)/2))/(1-1/K)/(1-1/K);
    			double c=2.0*(double)((N+1)/2)/Quick_Pow(K,(N+1)/2)/(1-1/K);
    //			double d=((double)(N+1)-2.0*(1-Quick_Pow(1/K,N/2+1))/(1-1/K))/(K+1);
    //			double d=((double)(N+1)/K-2.0*(1-Quick_Pow(1/K,N/2))/(K-1)-((double)(N+2)-2*(N/2))/Quick_Pow(K,N/2+1))/(1-1/K);
         		double d=(double)(N+1)*(1-Quick_Pow(1/K,N/2))/K/(1-1/K);
    			double e=-2.0*(1-Quick_Pow(1/K,N/2))/K/(1-1/K)/(1-1/K);
    			double f=2.0*(double)(N/2)/Quick_Pow(K,N/2+1)/(1-1/K);
    			printf("%.10f
    ",a+b+c+d+e+f);
    		}
    	}
    	return 0;
    }
  • 相关阅读:
    Django 前戏
    SQL基本语句
    如何正确安装Mysql
    JQuery
    解疑答惑—解决脱离标准文档流(恶心的浮动)
    事件
    卷基于快照进行恢复
    centos7下Firewall使用详解
    基于镜像卷启动的虚机快照代码分析
    nova卸载volume源码分析
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7143302.html
Copyright © 2011-2022 走看看