zoukankan      html  css  js  c++  java
  • BZOJ 3601 一个人的数论 (拉格朗日插值+莫比乌斯反演)

    题意

    题解

    orz Freopen的博客

    CODE

    #pragma GCC optimize (3)
    #include <bits/stdc++.h>
    using namespace std;
    char cb[1<<15],*cs=cb,*ct=cb;
    #define getc() (cs==ct&&(ct=(cs=cb)+fread(cb,1,1<<15,stdin),cs==ct)?0:*cs++)
    void read(int &res){
    	char ch; for(;!isdigit(ch=getc()););
    	for(res=ch-'0';isdigit(ch=getc());res=res*10+ch-'0');
    }
    const int MAXD = 105;
    const int MAXN = 1005;
    const int mod = 1e9 + 7;
    int d, n, p[MAXN], a[MAXN];
    
    int inv[MAXD], invf[MAXD], rinv[MAXD];
    int y[MAXD], cf[MAXD], dp[MAXD];
    
    inline int qpow(int a, int b) {
    	int re = 1;
    	while(b) {
    		if(b&1) re = 1ll * re * a % mod;
    		a = 1ll * a * a % mod; b >>= 1;
    	}
    	return re;
    }
    
    int main () {
    	read(d), read(n);
    	for(int i = 1; i <= n; ++i) read(p[i]), read(a[i]);
    	dp[0] = 1;
    	for(int i = 1; i <= d+2; ++i) {
    		y[i] = (y[i-1] + qpow(i, d)) % mod;
    		for(int j = d+2; j >= 0; --j)
    			dp[j] = ((j ? dp[j-1] : 0) - 1ll * dp[j] * i) % mod;
    	}
    	inv[0] = invf[0] = rinv[0] = 1;
    	inv[1] = invf[1] = 1; rinv[1] = -1;
    	for(int i = 2; i <= d+2; ++i)
    		inv[i] = 1ll * (mod - mod/i) * inv[mod%i] % mod,
    		invf[i] = 1ll * invf[i-1] * inv[i] % mod,
    		rinv[i] = 1ll * rinv[i-1] * (-inv[i]) % mod;
    	for(int i = 1; i <= d+2; ++i) {
    		for(int j = 0; j <= d+2; ++j) {
    			dp[j] = 1ll * ((j ? dp[j-1] : 0) - dp[j]) * inv[i] % mod;
    			cf[j] = (cf[j] + 1ll * dp[j] * invf[i-1] % mod * rinv[d+2-i] % mod * y[i]) % mod;
    		}
    		for(int j = d+2; j >= 0; --j)
    			dp[j] = ((j ? dp[j-1] : 0) - 1ll * dp[j] * i % mod) % mod;
    	}
    	int ans = 0;
    	for(int i = 0; i <= d+1; ++i) {
    		int tmp = 1;
    		for(int j = 1; j <= n; ++j)
    			tmp = 1ll * tmp * (qpow(qpow(p[j], a[j]), i) - 1ll * qpow(p[j], d) * qpow(qpow(p[j], a[j]-1), i) % mod) % mod;
    		ans = (ans + 1ll * tmp * cf[i] % mod) % mod;
    	}
    	printf("%d
    ", (ans + mod) % mod);
    }
    
  • 相关阅读:
    java远程调用rmi入门实例
    POJ2752 Seek the Name, Seek the Fame 【KMP】
    Scala入门到精通——第十六节 泛型与注解
    js:简单的拖动效果
    Android拍照、摄像方向旋转的问题 代码具体解释
    对dispatch_async到主线程的逻辑封装成C/C++接口类型
    Oracle password expire notices
    CentOS bridge br0 kvm libvirt-xml
    国内常用ntp服务器ip地址
    C Deepin指针
  • 原文地址:https://www.cnblogs.com/Orz-IE/p/12039203.html
Copyright © 2011-2022 走看看