zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    55     }
    56 }
  • 相关阅读:
    1836Alignment
    JS日期格式化
    excle自编公式方法
    excle的公式说明
    小技巧之一 string[]合并
    Nunit的使用小问题
    Ajax中上传文件的方式
    VSS也有BUG?
    SQL Server中将时间型的转为yyyyMMddhhmmss
    给已经存在的PDF文件加水印
  • 原文地址:https://www.cnblogs.com/helica/p/5205198.html
Copyright © 2011-2022 走看看