Codeforces Round #295 (Div. 2) E. Pluses everywhere
2015-03-05 15:22
363 查看
在n位数之间插入k个+,求所有方式加起来的和mod1e9+7;
考虑各个位上的数对最终结果的贡献,把各个位作为个十百千...位的次数用组合数写出来可以发现规律;
大组合数取模:预处理阶乘和阶乘的逆元,阶乘的逆元可以从后往前递推。
考虑各个位上的数对最终结果的贡献,把各个位作为个十百千...位的次数用组合数写出来可以发现规律;
大组合数取模:预处理阶乘和阶乘的逆元,阶乘的逆元可以从后往前递推。
#include<iostream> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<iomanip> #include<map> #include<algorithm> #include<queue> #include<set> #define inf 1000000000 #define pi acos(-1.0) #define eps 1e-8 #define seed 131 using namespace std; typedef pair<int,int> pii; typedef unsigned long long ULL; typedef long long LL; const int maxn=100005; LL mod=1000000007; LL jiech[maxn]; LL rev[maxn]; LL sum[maxn]; LL r[maxn]; char s[maxn]; int n,k; LL powMod(LL a,LL m) { if(m==0) return 1; LL ans=powMod(a,m/2);//求逆元 ans=ans*ans%mod; if(m%2==1) ans=ans*a%mod; return ans; } LL C(int n,int m) { if(m>n) return 0; return jiech *rev[n-m]%mod*rev[m]%mod; } int main() { scanf("%d%d",&n,&k); scanf("%s",s+1); sum[0]=0; for(int i=1;i<=n;i++) sum[i]=sum[i-1]+(s[i]-'0'); jiech[0]=1; r[0]=1; for(int i=1;i<=100000;i++) { jiech[i]=jiech[i-1]*i%mod; r[i]=r[i-1]*10%mod; } rev[100000]=powMod(jiech[100000],mod-2); for(int i=99999;i>=0;i--) { rev[i]=rev[i+1]*(i+1)%mod; } LL res=0; for(int i=1;i<=n;i++) { res=((res+sum[i-1]*r[n-i]%mod*C(i-2,k-1)%mod)%mod+(s[i]-'0')*r[n-i]%mod*C(i-1,k)%mod)%mod; } cout<<res; return 0; }
相关文章推荐
- Codeforces Round #295 (Div. 2) -- B. Two Buttons (模拟)
- Codeforces Round #295 (Div. 2)(A,B,C)
- Codeforces Round #364 (Div. 2)C They Are Everywhere(尺取法)
- Codeforces Round #364 (Div. 2) C. They Are Everywhere
- Codeforces Round #295 (Div. 2)-C. DNA Alignment
- 【Codeforces Round 364 (Div 2)C】【前缀和 双指针】They Are Everywhere 含有所有字符的最短区间长度
- Codeforces Round #295 (Div. 1)
- Codeforces Round #295 (Div. 2) D.Cubes(STL)
- Codeforces Round #295 (Div. 2)——B——Two Buttons
- Codeforces Round #364 (Div. 2) C. They Are Everywhere(stl+乱搞)
- Codeforces Round #295 (Div. 2) A、B
- Codeforces Round #295 (Div. 2), problem: (A) Pangram
- Codeforces Round #Pi (Div. 2)
- Codeforces Round #275 (Div. 2) A,B,C
- Codeforces Round #247 (Div. 2) D Random Task
- Codeforces Round #149 (Div. 2) E. XOR on Segment (线段树成段更新+二进制)
- Codeforces Round #131(Div. 2)E题
- Codeforces Round #106 (Div. 2) E. Martian Strings
- Codeforces Round #324 (Div. 2)ABC
- Codeforces Round #249 (Div. 2) C. Cardiogram