Description

神犇xzyo听说sl很弱,于是出了一题来虐一虐sl。一个长度为2n(可能有前缀0)的非负整数x是good的,当且仅当
存在两个长度为n(可能有前缀0)的非负整数a、b满足a+b==10n,并且对于0~9每个数位d,都有Sd(x)==Sd(a)+Sd(
b)(Sd(x)为x的十进制中d出现了多少次)。例如0829是good的,98+02==100。给出一个长度为2n的序列,其中有些
位置是问号。将每个问号替换为0~9任意一个数位后,有多少个good数,答案对1000000007取膜。为了sl不被虐死
,快告诉他怎么写吧。
两个数相加为10^n,意味着可以将数位一部分按09,18,27,36,45配对表示较高位的情况,低位有一对19,28,37,46,55产生了一次进位,更低位可以全0。枚举哪一对数产生进位,可以算出0的出现次数-9的出现次数,1-8,2-7,3-6,4-5的值,然后做一次背包。需要特判一些情况:因为两个0可以配对,0-9的值表示的是0至少比9多几个,实际可以再把一些9换成0,但如果19产生进位,必须留下至少一个9(可能来自已确定的数位,也可能必须由?提供)而不能全部换成0。
#include<bits/stdc++.h>
typedef long long i64;
const int P=1e9+;
char s[];
int n,t[],m=,ts[];
i64 f[],g[],fac[],fiv[],ans=;
i64 _ks[][],(*ks)[]=_ks+;
bool d9=;
void cal(int tp){
memset(f,,sizeof(f));
f[]=;
for(int i=;i<;++i){
memset(g,,sizeof(g));
if(ts[i]>m||i&&ts[i]<-m)return;
if(!i){
while(ts[i]<-m)ts[i]+=;
for(int s=,d=;s<=m;++s){
i64 iv=ks[ts[i]][s];
if(!iv)continue;
if(tp==&&!d9&&(s+ts[i])%==)iv=(iv-fiv[s]+P)%P;
for(int j=s;j<=m;++j)g[j]+=f[j-s]*iv;
if(++d>){
d=;
for(int j=;j<=m;++j)g[j]%=P;
}
}
}else for(int a=ts[i],b=,d=;a+b<=m;++a,++b)if(a>=){
int s=a+b;
i64 iv=fiv[a]*fiv[b]%P;
for(int j=s;j<=m;++j)g[j]+=f[j-s]*iv;
if(++d>){
d=;
for(int j=;j<=m;++j)g[j]%=P;
}
}
for(int j=;j<=m;++j)f[j]=g[j]%P;
}
ans=(ans+f[m]*fac[m])%P;
}
i64 pw(i64 a,int n){
i64 v=;
for(;n;n>>=,a=a*a%P)if(n&)v=v*a%P;
return v;
}
int main(){
for(int i=fac[]=;i<=;++i)fac[i]=i*fac[i-]%P;
fiv[]=pw(fac[],P-);
for(int i=;i;--i)fiv[i-]=i*fiv[i]%P;
scanf("%s",s);
n=strlen(s);
if(n&)return puts(""),;
for(int i=;i<n;++i){
if(s[i]=='?')++m;
else ++t[s[i]-''];
d9|=s[i]=='';
}
for(int i=m;i>=-m;--i){
for(int a=i,b=;a+b<=m;++a,++b)if(a>=)ks[i][a+b]=fiv[a]*fiv[b]%P;
for(int j=;j<=m;++j)ks[i][j]=(ks[i][j]+ks[i+][j])%P;
}
for(int i=;i<=;++i){
for(int j=;j<;++j)ts[j]=t[j];
--ts[i],--ts[-i];
for(int j=;j<;++j)ts[j]=ts[-j]-ts[j];
i64 a0=ans;
cal(i);
a0=ans-a0;
}
printf("%lld\n",ans);
return ;
}

bzoj4980: 第一题的更多相关文章

  1. [算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

    上一篇的blog地址为:http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题,在最后的编程题中竟然出现了去哪儿网开发的第一题,也就 ...

  2. 《学习OpenCV》练习题第五章第一题ab

    这道题是载入一幅带有有趣纹理的图像并用不同的模板(窗口,核)大小做高斯模糊(高斯平滑),然后比较用5*5大小的窗口平滑图像两次和用11*11大小的窗口平滑图像一次是否接近相同. 先说下我的做法,a部分 ...

  3. 《学习OpenCV》练习题第四章第一题b&c

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  4. 《学习OpenCV》练习题第四章第一题a

    #include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...

  5. Google Code Jam 第一题

    通过的第一题,留做纪念,呵呵,非常简单,Africa 2010, Qualification Round: Store Credit. #include <stdio.h> #includ ...

  6. 图论测试题(一)第一题:longest

    第一题:longest 乌托邦有n个城市,某些城市之间有公路连接.任意两个城市都可以通过公路直接或者间接到达,并且任意两个城市之间有且仅有一条路径(What does this imply? A tr ...

  7. ZOJ 2334(Monkey King-左偏树第一题)

    Monkey King Time Limit: 10 Seconds      Memory Limit: 32768 KB Once in a forest, there lived N aggre ...

  8. BZOJ 3172([Tjoi2013]单词-后缀数组第一题+RMQ)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 268   Solved: 145 [ Submit][ St ...

  9. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

随机推荐

  1. 在windows 上的RedisClient 上连接远程linux redis ("jave.net.ConnectException: Connection refused:connect")

    1.把防火墙禁用掉 2.redis.conf配置文件,注释掉bind 127.0.0.1 3.重启redis服务

  2. C语言--第四周作业评分和总结(5班)

    作业链接:https://edu.cnblogs.com/campus/hljkj/CS2017-5/homework/1129 一.评分要求 要求1 完成PTA第四周所有题(20分). 要求2 4道 ...

  3. PTA——各位数之和

    PTA 7-28 求整数的位数及各位数字之和 我的程序: #include<stdio.h> #include<math.h> int main(){ ,t; scanf(&q ...

  4. visual studio + opencv + contrib

    经过一天的奋战,终把opencv给用起来了.我是用的工具是vs2017+opencv3.3 上午想用mingw+opencv,结果查了很多资料说gcc不支持opencv.我感觉很奇怪,支不支持以后再说 ...

  5. url参数和字典的相互转化

    目标url:https://www.baidu.com/s?&wd=python&ie=utf-8 将字典转成url参数 使用urllib.parse的urlencode方法,将字典对 ...

  6. Hadoop权威指南

    初识Hadoop Hadoop与其它系统比较 数据库的劣势:磁盘寻址性能低发展慢 数据库索引? MapReduce适合一次写入,多次读取的应用,关系型数据库适合持续更新的数据集 Hadoop在处理数据 ...

  7. Sping--注解(一) 常用注解总结

    Sping注解是很重要的一块.今天在这里对常用到的注解做个小结,会尽可能说得详细些. 推荐这个英文文档,官方文档当然是最好的.最近发现,学习东西,还是多看官方文档,最权威,最详细. https://d ...

  8. CH3B04 Xiao 9*大战朱最学

    题意 3B04 Xiao 9*大战朱最学 0x3B「数学知识」练习 背景 Xiao 9*.朱最学.小全同属LOI,朱某某同学由于学习认真得到了小全的仰慕~~送其外号---朱最学.最学想:神牛我当不成难 ...

  9. maven项目eclipse目录结构浅析

    maven项目eclipse目录结构浅析 PS:Java Resources是为了方便我们编译,到最后都会编译到   WEB-INF/classes Maven项目的目录结构

  10. lua-resty-shell 多任务执行

    已经写过一个openresty 使用lua-resty-shell 执行shell 脚本的demo,但是实际上我们可能是多节点运行, 同时需要负载均衡的机制. lua-resty-shell 支持un ...