#include<bits/stdc++.h>
using namespace std;
const long long MOD=10E9+7;
int len;
int dp[100005][13];
string s;
int main()
{
cin>>s;
len=s.size();
dp[0][0]=1;
for(int i=0;i<len;i++)
{
for(int j=0;j<=12;j++)
{
if(s[i]!='?')
{
dp[i+1][(j*10+s[i+1]-'0')%13]=dp[i][j]+dp[i+1][(j*10+s[i+1]-'0')%13];
dp[i+1][(j*10+s[i+1]-'0')%13]=dp[i+1][(j*10+s[i+1]-'0')%13]%MOD;
}
if(s[i]=='?')
{
for(int k=0;k<=9;k++)
{
dp[i+1][(j*10+k)%13]=dp[i][j]+dp[i+1][(j*10+k)%13];
dp[i+1][(j*10+k)%13]=dp[i+1][(j*10+k)%13]%MOD;
}
}
}
}
cout<<dp[len-1][5]%MOD;
return 0;
}
输入"1?"是0!
题面
2. 十三有五
题目ID:15687必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 262144kB
题目描述
题目描述
给你一个由数字和
?
?构成的字符串,你需要将所有的
?
?替换成
0
0到
9
9中的任意一个数字,然后得到一个数字。问所有最终得到的数字中,有多少个数字对
13
13取余为
5
5。
答案对
1
0
9
+
7
10
9
+7取模。
输入格式
一行输入一个长度为
�
(
1
≤
�
≤
100000
)
n(1≤n≤100000)字符串
�
S。
输出格式
输出一个整数,表示可行的总个数。
样例#1
输入样例#1
1?
输出样例#1
1
输入样例#2
??
输出样例#2
8
样例说明
对于样例#2,可能的情况有:
05
,
18
,
31
,
44
,
57
,
70
,
83
,
96
05,18,31,44,57,70,83,96,一共
8
8种情况。

