题目链接

ps:可能组合数一不小心打错了,请发现的大佬提出,谢谢。

我们来讨论每一位数$a_{i}$被算了多少次。

总共有$n-1$个空位可以放$'+'$所以,$a_{i}$左边有$i-1$个空位,右边$n-1-(i-1)$个。

举个例子来说~~(手动模拟一下)~~,如果数$a_{i}$右边有一个加号,则剩下$n-2$个空位放$k-1$个加号的方案里,每种方案$a_{i}$都当做各位记录到答案里,所以对答案影响:$C^{k-1}_{n-2}*$ $a_{i}$。
假设右边第一个不放,第二个放加号,则还有$n-3$个空位,$k-2$个加号。(因为$a_{i}$右边的以为不能放加号)对答案影响: $C_{n-3}^{k-2}*10*$ $a_{i}$。

$emm……$规律好像找出来了。

这样一直递推下去~~(找规律)~~的话。到$a_{n-1}$ 和 $a_{n}$ 位填的话。对答案的影响: $C^{1}_{n-k-2}*10^{k-1}*a_{i}$

但是,我们发现,最后一位数的后面好像并不能放加号。也就是说,最后一位需要特判。。。

所以,当右边全空着的时候对答案的贡献 $10^{i}*C_{n-i-1}^{i}*a_{i}$

全部统计起来,输出就好。
代码奉上。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std; const long long p=1e9+;
int n,k;
long long ans[];
char a[]; long long pen[];//阶乘
long long rpen[];//阶乘逆元
long long num[];//系数 long long pow2(long long a,long long b)
{
long long res=;
for(;b;b>>=,a=a*a%p) if(b&) res=res*a%p;
return res%p;
} void rebiut()
{
num[]=pen[]=rpen[]=;
for(int i=;i<=n;i++)
pen[i]=pen[i-]*i%p,
rpen[i]=pow2(pen[i],p-),
num[i]=*num[i-]%p;
return ;
} long long C(long long n,long long k)//计算组合数,n下面,k上面
{
if(k<||k>n||n<) return ;
else return ((pen[n]*rpen[k])%p)*rpen[n-k]%p;
} long long now; int main()
{
scanf("%d%d",&n,&k);
scanf("%s",a);
rebiut(); for(int i=;i<n;i++) now=(now+num[i]*(a[n-i-]-''))%p;
if(k==) {printf("%lld ",now);return ;} int d=n-k-;
ans[]=C(n-,k-); for(int i=;i<=d;i++) ans[i]=(ans[i-]+num[i]*C(n-i-,k-))%p;
for(int i=d+;i<n;i++) ans[i]=ans[i-];
for(int i=;i<=d;i++) ans[i]=(ans[i]+num[i]*C(n-i-,k))%p;
now=;
for(int i=;i<n;i++) now=(now+ans[n-i-]*(a[i]-''))%p;
printf("%lld ",now);
return ;
}

最新文章

  1. linux screen 命令详解
  2. SQL数据库索引查询
  3. 跟我学-Java底层技术系列文章
  4. 产生0-9 A-Z a-z
  5. Java并发编程-ConcurrentHashMap
  6. 怎么给ABBYY FineReader Mac导入图像
  7. FastScroll(2)不分组的listview 打开fastscroll的分组提示功能
  8. 关于atoi的实现
  9. java.lang.String.indexOf()用法
  10. 理解ATL中的一些汇编代码(通过Thunk技术来调用类成员函数)
  11. 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set(&quot;utf-8&quot;)两种方法)
  12. 找工作笔试面试那些事儿(8)---常问的CC++基础题
  13. JAVA中断机制详解
  14. BZOJ 1923: [Sdoi2010]外星千足虫 [高斯消元XOR]
  15. HBase在共享经济互联网业务的应用
  16. java:tomcat(负载均衡)nginx的应用配置
  17. linux重启Oracle服务
  18. socket流程
  19. 强化学习3-蒙特卡罗MC
  20. 2.2.5synchronized代码间的同步性

热门文章

  1. Tornado 高并发源码分析之四--- HTTPServer 与 TCPServer 对象
  2. linux rz -e
  3. Spring Cloud Eureka 2 (Eureka Server搭建服务注册中心)
  4. S3C6410的启动代码分析&amp;nbsp;一
  5. 关于项目报错Dynamic Web Module 3.0 requires Java 1.6 or newer 的解决方法
  6. HashMap和HashSet的相同点和不同点
  7. 501. Find Mode in Binary Search Tree查找BST中的众数
  8. 在CentOS7.5里安装FTP服务器
  9. SqlServer——神奇代码1之Update
  10. xgboost dmatrix中的 weight的重要性