zoukankan      html  css  js  c++  java
  • [LOJ6671] EntropyIncreaser 与 Minecraft

    前言

    仅以此纪念我为数不多自己做出来的数学题。

    当然这道题不难,不然我也做不出来。

    其实就是想水博客。

    题目

    LibreOJ

    讲解

    直接暴力化式子就好了。

    (i) 为威力,(j)(x_i) 不为(0),前面的 (1) 是全 (0) 的情况。

    (1+sum_{i=1}^psum_{j=1}^nC(n,j) imes 2^j imes C(i-1,j-1))

    (1+sum_{j=1}^{n}C(n,j) imes 2^j imessum_{i=1}^p C(i-1,j-1))

    (1+sum_{j=1}^{n}C(n,j) imes 2^j imes C(p,j))

    大概就是把 (sum) 乱换位置,然后发现有些东西可以变换形式,从而使式子变得更简洁。

    这就是推式子?

    代码

    人丑常数大
    //12252024832524
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define TT template<typename T>
    using namespace std; 
    
    typedef long long LL;
    const int MAXN = 1000005;
    const int MOD = 1e9 + 7;
    int n,p,ans = 1;
    
    LL Read()
    {
    	LL x = 0,f = 1;char c = getchar();
    	while(c > '9' || c < '0'){if(c == '-')f = -1;c = getchar();}
    	while(c >= '0' && c <= '9'){x = (x*10) + (c^48);c = getchar();}
    	return x * f;
    }
    TT void Put1(T x)
    {
    	if(x > 9) Put1(x/10);
    	putchar(x%10^48);
    }
    TT void Put(T x,char c = -1)
    {
    	if(x < 0) putchar('-'),x = -x;
    	Put1(x); if(c >= 0) putchar(c);
    }
    TT T Max(T x,T y){return x > y ? x : y;}
    TT T Min(T x,T y){return x < y ? x : y;}
    TT T Abs(T x){return x < 0 ? -x : x;}
    
    int fac[MAXN],ifac[MAXN]; 
    int qpow(int x,int y)
    {
    	int ret = 1;
    	while(y){if(y&1) ret = 1ll * ret * x % MOD;x = 1ll * x * x % MOD;y >>= 1;}
    	return ret; 
    }
    void init(int x)
    {
    	ifac[0] = fac[0] = 1;
    	for(int i = 1;i <= x;++ i) fac[i] = 1ll * fac[i-1] * i % MOD;
    	ifac[x] = qpow(fac[x],MOD-2);
    	for(int i = x-1;i >= 1;-- i) ifac[i] = 1ll * ifac[i+1] * (i+1) % MOD;
    } 
    LL C(int x,int y)
    {
    	if(x < y || y < 0) return 0;
    	return 1ll * fac[x] * ifac[y] % MOD * ifac[x-y] % MOD;
    }
    int Add(int x){if(x >= MOD) x -= MOD;return x;}
    
    int main()
    {
    //	freopen(".in","r",stdin);
    //	freopen(".out","w",stdout);
    	n = Read(); p = Read();
    	init(Max(n,p));
    	for(int i = 1,mi = 2;i <= n;++ i) ans = (ans + C(n,i) * mi % MOD * C(p,i)) % MOD,mi = Add(mi << 1);
    	Put(ans);
    	return 0;
    }
    
  • 相关阅读:
    2015-05-27 用正则把oracle时间转化到mysql时间
    linux版idea14界面美观和windows,mac基本一致
    ubuntu 下自定义快捷键,,用着舒服
    ubuntu 方便好用的截图软件
    Integer 包装器类 大小比较
    win7、ubuntu双系统,遇到分区不可用问题,和卸载ubuntu后win7开不了机
    巧妙小思想
    读取16进制文件和校验图片格式的问题。 文件名后缀
    旧电脑变废为宝!
    Win10打开Autodesk软件时提示“管理员已阻止你运行此应用”
  • 原文地址:https://www.cnblogs.com/PPLPPL/p/15072425.html
Copyright © 2011-2022 走看看