传送门

马老师打算起飞。

一个长度为 2n(2n\ (2n (可能有前缀0)0)0) 的非负整数 xxx 是 goodgoodgood 的,当且仅当存在两个长度为 n(n\ (n (可能有前缀0)0)0) 的非负整数 a、ba、ba、b 满足 a+b=10na+ b =10 ^ na+b=10n,并且对于 0∼90\sim90∼9 每个数位 ddd,都有 Sd(x)=Sd(a)+Sd(b)(Sd(x)Sd(x) = Sd(a) + Sd(b)(Sd(x)Sd(x)=Sd(a)+Sd(b)(Sd(x)为 xxx 的十进制中 ddd 出现了多少次)))。例如 082908290829 是 goodgoodgood 的,98+02=10098 + 02 = 10098+02=100 。

给出一个长度为 2n2n2n 的序列,其中有些位置是问号。将每个问好替换为 0∼90 \sim 90∼9 任意一个数位后,有多少个 goodgoodgood 数,答案对 100000000710000000071000000007 取模。

一行长度为 2n2n2n 的字符串,由 0∼90 \sim 90∼9 和 ??? 构成。

一个整数表示答案。

样例输入

2?4?

样例输出

4

设 mmm 为 ??? 的个数。

对于 30%30\%30% 的数据,n≤6n \leq 6n≤6 。

对于另外 30%30\%30% 的数据, m≤6m \leq 6m≤6 。

对于 100%100\%100% 的数据, n≤50000,m≤1000n \leq 50000,m \leq 1000n≤50000,m≤1000 。

题解:
注意到,设 aaa 的十进制为 a1a2a3…ana_1a_2a_3\dots a_na1​a2​a3​…an​ , bbb 为 b1b2b3…bnb_1b_2b_3\dots b_nb1​b2​b3​…bn​,那么必定是 a1+b1=9a_1+b_1=9a1​+b1​=9,a2+b2=9a_2+b_2=9a2​+b2​=9,ak+bk=10a_k+b_k=10ak​+bk​=10,ak+1+bk+1=0…an+bn=0a_{k+1}+b_{k+1}=0\dots a_n+b_n=0ak+1​+bk+1​=0…an​+bn​=0。
于是考虑枚举 ak,bka_k,b_kak​,bk​,然后贪心先配已知的和为十,然后枚举和为十的数对 DPDPDP。
注意考虑0+90+90+9和0+00+00+0,当剩余的数个数是奇数时,多的位可以填 000 或 999 ,但填 999 时不能有0+00+00+0 出现,因为会算重。

#include<bits/stdc++.h>
#define N 50005
#define M 1005
using namespace std;
const int mod=1000000007;
int read(){int op=1,sum=0;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') op=-1;ch=getchar();}while(ch>='0'&&ch<='9') sum=(sum<<3)+(sum<<1)+ch-'0',ch=getchar();return op*sum;
}
int jc[N],jcinv[N];
inline int power(int x,int c){int now=1;while(c){if(c&1)now=1ll*now*x%mod;x=1ll*x*x%mod;c>>=1;}return now;
}
inline void init(int n){jc[0]=1;for(int i=1;i<=n;++i)jc[i]=1ll*jc[i-1]*i%mod;jcinv[n]=power(jc[n],mod-2);for(int i=n-1;i+1;--i)jcinv[i]=1ll*jcinv[i+1]*(i+1)%mod;
}
inline int C(int x,int y){if(x<y||y<0)return 0;return 1ll*jc[x]*jcinv[y]%mod*jcinv[x-y]%mod;
}
char s[N<<1];
int cnt[11],res,pre[11],cal[11],f[M],g[M],tmp[M];
int dx[]={1,2,3,4};
int dy[]={8,7,6,5};
int main(){//   freopen("data.in","r",stdin);
//  freopen("eatbuff.in","r",stdin);
//  freopen("eatbuff.out","w",stdout); init(M-2);scanf("%s",1+s);int n=strlen(1+s);for(int i=1;i<=n;++i){if(s[i]=='?'){++res;continue;}pre[s[i]-'0']++;}int ans=0,num=res;for(int t=1;t<=5;++t){res=num;memset(cal,0,sizeof(cal));for(int j=0;j<10;++j)cnt[j]=pre[j];cnt[t]--,cnt[10-t]--;if(cnt[t]<0){cal[t]++;cnt[t]++;res--;}if(cnt[10-t]<0){cal[10-t]++;cnt[10-t]++;res--;}for(int j=0;j<=4;++j){int now=min(cnt[j],cnt[9-j]);cnt[j]-=now,cnt[9-j]-=now;}for(int j=1;j<=9;++j){if(cnt[j]){cal[9-j]+=cnt[j],res-=cnt[j];}}if(res<0)continue;memset(tmp,0,sizeof(tmp));if(res&1){res>>=1;cal[0]++;for(int i=0;i<=res;++i){//0 0for(int j=0;j+i<=res;++j){//0 9tmp[i+j]=(tmp[i+j]+1ll*jcinv[cal[0]+2*i+j]*jcinv[cal[9]+j]%mod)%mod;}}cal[0]--;cal[9]++;for(int j=0;j<=res;++j){tmp[j]=(tmp[j]+1ll*jcinv[cal[0]+j]*jcinv[cal[9]+j]%mod)%mod;}cal[9]--;res=(res<<1)|1;}else{res>>=1;for(int i=0;i<=res;++i){//0 0for(int j=0;j+i<=res;++j){//0 9tmp[i+j]=(tmp[i+j]+1ll*jcinv[cal[0]+2*i+j]*jcinv[cal[9]+j]%mod)%mod;}}res<<=1;}if(res&1)cal[9]++,cnt[0]--;res>>=1;for(int i=1;2*i<=cnt[0];++i){// 9 9for(int j=0;j+i<=res;++j){// 0 9tmp[i+j]=(tmp[i+j]+1ll*jcinv[cal[0]+j]*jcinv[cal[9]+2*i+j]%mod)%mod;}}memset(f,0,sizeof(f));f[0]=1;for(int t=0;t<4;++t){memset(g,0,sizeof(g));for(int i=0;i<=res;++i){for(int j=0;j<=i;++j){g[i]=(g[i]+1ll*f[j]*jcinv[cal[dx[t]]+i-j]%mod*jcinv[cal[dy[t]]+i-j]%mod)%mod;}}for(int i=0;i<=res;++i){f[i]=g[i];}}int pre=ans;for(int i=0;i<=res;++i){ans=(ans+1ll*f[i]*tmp[res-i]%mod)%mod;}}ans=1ll*ans*jc[num]%mod;printf("%d\n",(ans+mod)%mod);return 0;
}

DTOJ#5208. 蓝buff一吃就起飞相关推荐

  1. 机器人 蓝buff 钩_lol:机器人史诗级加强,从河道钩蓝buff,对面打野要骂人

    原标题:lol:机器人史诗级加强,从河道钩蓝buff,对面打野要骂人 机器人一直是玩家们最爱的英雄之一,而且不仅限于辅助玩家,在你或主动或被动的情况下需要去进行辅助的时候,你肯定会选择一个机器人来搞一 ...

  2. 机器人 蓝buff 钩_LOL:机器人Q大加强,河道就能勾到蓝Buff?RNG笑了!

    原标题:LOL:机器人Q大加强,河道就能勾到蓝Buff?RNG笑了! 英雄联盟世界赛马上就要来临了,根据官方的消息,今年的比赛将会采取9.19版本,大家都知道版本对于比赛的重要性,很有可能会决定一支队 ...

  3. 王者S19服务器维护时间表,王者荣耀s19buff刷新时间一览 红蓝BUFF刷新间隔是多久...

    王者荣耀S19赛季加大了打野位对战局的影响,因此熟悉红蓝BUFF的刷新时间非常重要,无论是反BUFF还是拿自家BUFF都应该清楚刷新时间点.今日光耀菌就为大家带来了红蓝BUFF的刷新时间表,快来了解一 ...

  4. 机器人 蓝buff 钩_机器人要在S赛登场了?Ming韩服练起来了,这是RNG黑科技?

    随着S9全球总决赛日程的逼近,各大战队也纷纷结束了休假,投入到了紧张的训练之中.对于这次S9世界赛的版本,应该是上中野的版本,因为不少战士单带型上单得到了巨大加强,而且中路会有一些法师英雄回归,总体来 ...

  5. 机器人 蓝buff 钩_LOL:机器人Q增强,能从河道钩走蓝buff,将在S9大放异彩

    原标题:LOL:机器人Q增强,能从河道钩走蓝buff,将在S9大放异彩 英雄联盟可以说是当今最火的网游,网吧中十个人里面有八个人都在玩这个游戏.现在英雄联盟已经有一百四十五位英雄了,每个英雄都有自己的 ...

  6. 机器人 蓝buff 钩_LOL机器人Q增强,能从河道钩走蓝buff,将在S9大放异彩

    英雄联盟可以说是当今最火的网游,网吧中十个人里面有八个人都在玩这个游戏.现在英雄联盟已经有一百四十五位英雄了,每个英雄都有自己的特色,其中蒸汽机器人的存在极为特殊.它是一个上限和下限都很高的英雄,玩得 ...

  7. 修·蓝博士:吃东西前一定要这样清理

    你有没有发现,我们对吃进嘴里的东西也存在各式各样的记忆? 比如汉堡披萨是垃圾食品,蔬果是好东西要多吃,米面糖分高要少吃-- 其实食物是中性的,同样的食物对不同个体有不一样的作用.一起来看看修·蓝博士吃 ...

  8. 机器人 蓝buff 钩_LOL—蒸汽机器人—布里茨辅助攻略

    技能: 法力屏障[被动]:布里茨生命值低于20%时,将激活法力屏障,冷却时间1分钟,产生相当于布里茨法力值50%的魔法护盾,持续10秒. 解析:非常好用的技能,它曾经救过我无数次,当然也可以救你无数次 ...

  9. 净网大师最好用旧版本_云顶之弈手把手教你吃分系列:决斗大师

    很忏愧,这个阵容并非我原创,也是我偷师而来,不过最近一直在用,效果也不错,所以主要会讲讲心得,而不是原先的基础. 先看阵容构成: 亚索(天选决斗大师).剑姬.武器.风女.卡莉斯塔/赵信.慎.永恩.盲僧 ...

  10. js实现加buff功能

    html部分 <button id = "addBlue">加蓝buff</button><button id = "addRed" ...

最新文章

  1. AS3汉字sokcet传送编码问题
  2. 成功解决AttributeError: module 'tensorflow.python.training.training' has no attribute 'SummaryWriter'
  3. 软工三(5.12上课)
  4. 分享一下vue ui的分页的用法
  5. arma3自定义服务器,Arma3 生存服架设教程,武装突袭3游戏服务器架设
  6. jzoj6801-NOIP2020.9.19模拟patrick【树状数组】
  7. .net mvc actionresult 返回字符串_ASP.NET Core中的Action的返回值类型
  8. 从谷歌公司发现的十个至理名言
  9. nginx访问本地目录一直不好使_Nginx跳转本地目录容易犯的错误
  10. php 获取季度起始日期,php获取昨天、今天、上周、本周、上月、本月、上季度、本季度、今年的起始时间...
  11. FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracking 效果展示
  12. 把“TCP/IP”协议讲明白
  13. 嵌入式系统——RS232和RS449
  14. 如何格式化用过的磁带,让他被新磁带机重复利用
  15. Android-Activity详解与汇总
  16. 03-创建模型操作---用户添加
  17. 卸载WPS后office文档图标不能正常显示和WPS网盘图标无法删除
  18. Java游戏吉他英雄_《吉他英雄:现场》《摇滚乐队4》横向对比:各有所长!
  19. The Timebox
  20. 微信怎么群发视频和文件?

热门文章

  1. halcon测量距离
  2. 如何开通微信小程序在线客服系统?
  3. 计算机演示文稿实验报告,演示文稿实验报告.doc
  4. 一些linux牛皮糖
  5. 2020寒假【gmoj2008】【Oliver的成绩】【高精度】
  6. STM32L431 I2S/IIS slaver使用
  7. ios第3天的气泡作业
  8. 方差,协方差,标准差和均值标准差等各种差
  9. 有损脑健康的七种坏习惯
  10. 《枯野抄》--奇妙的人性窥视抄