【2018icpc焦作網路賽 Save the Room】【組合數【隔板法】【高次冪取模】
阿新 • • 發佈:2018-12-10
【連結】
【題意&思路】
把一個數拆分成一個數的和求方法數。
比如 4=1+1+1+1=1+1+2=2+2=1+3=4
相當於有(n-1)個空插隔板,方法數即為2^(n-1).
【程式碼】
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1000005; const ll mod = 1000000007LL; char s[maxn]; ll qpow(ll a, ll n) { ll res = 1; while (n > 0) { if (n & 1) res = res * a % mod; a = a * a % mod; n >>= 1; } return res; } int main() { int T; scanf("%d", &T); while (T--) { scanf("%s", s); ll ans = 1; int l = strlen(s); for (int i = 0; i < l; ++i) { int n = s[i] - '0'; ans = qpow(ans, 10) * qpow(2, n); ans %= mod; } ans = ans * qpow(2, mod - 2) % mod; printf("%lld\n", ans); } return 0; }