CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板相关的知识,希望对你有一定的参考价值。

经过研究可以发现,每一位的贡献是C(n-2,k-1)+C(n-3,k-1)...C(k-1,k-1)

同时还要注意加号全部在左边的情况。

这里还用了O(n)预处理O(1)组合数的模板。//妙啊。。妙。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define LL long long
 5 
 6 using namespace std;
 7 
 8 const int MOD = 1e9+7;
 9 const int maxn = 3e5+10;
10 
11 LL f[maxn],inv[maxn],fac[maxn];
12 
13 void init()
14 {
15     fac[0] = fac[1] = inv[0] = inv[1] = f[0] = f[1] = 1;
16     for(int i=2;i<maxn;i++)
17     {
18         fac[i] = fac[i-1]*i%MOD;
19         LL t = MOD/i,k = MOD%i;
20         f[i] = (MOD-t)*f[k]%MOD;
21         inv[i] = inv[i-1]*f[i]%MOD;
22     }
23 }
24 
25 LL C(LL n,LL m)
26 {
27     if(n < m || m < 0) return 0;
28     return fac[n]*inv[m]%MOD*inv[n-m]%MOD;
29 }
30 
31 char s[maxn];
32 int N,K;
33 LL save[maxn];
34 
35 int main()
36 {
37     init();
38     while(~scanf("%d%d",&N,&K))
39     {
40         scanf("%s",s);
41         LL base = 1;
42         for(int i=1;i<=N;i++)
43         {
44             save[i] = (save[i-1]+C(N-1-i,K-1)*base%MOD)%MOD;
45             base = base*10%MOD;
46         }
47         LL ans = 0;base = 1;
48         for(int i=N-1;i>=0;i--)
49         {
50             ans += (s[i]-0)*(save[N-1-i]+C(i,K)*base%MOD)%MOD;
51             ans %= MOD;
52             base = base*10%MOD;
53         }
54         printf("%I64d\n",ans);
55     }
56 }

 

以上是关于CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板的主要内容,如果未能解决你的问题,请参考以下文章

网络流(最大流)CodeForces 512C:Fox And Dinner

前行◇第3站◇ Codeforces Round #512 Div2

EVE配置要求高么,要啥样的配置

Codeforces 512D. Fox And Travelling 题解

codeforces round 512 F. Putting Boxes Together 树状数组维护区间加权平均数

Codeforces_512B: Fox And Jumping