Description
Wild Number是一个有数字和问号组成的字符串(例如36?1?8)。一个数字与一个WildNumber匹配,当且仅当它们长度相等且不是问号的位置上对应相等。例如365198匹配36?1?8,但360199,361028,36128都不匹配。
Input
输入有相同长度的两行,第一行表示Wild Number,第二行一个整数X,X无前导零。数字长度在1-10之间。
Output
输出大于X且匹配Wild Number的n位数有多少个。(n是Wild Number的长度。)
Sample Input
?
5
Sample Output
4
Data Constraint
Hint
数据范围
N<=10
?的个数小于等于7
分析:用数据说话。
数据1:???
706 (某个LY的生日,don’t吐槽)
输出: 293
分析:如果我们的第一位比8要大,后面就可以不管了,然后选7,求后面的答案。
Ans=ans+(9-7)*10^s (s为后面1的个数)
数据2:8?? 14??
623 1314 (另 一个LY的生日,don’t吐槽)
输出:100 100
如果前面的位比x大,直接输出10^s次方;
数据3:6?4 1??5 5?0
623 1314 520
输出:8 69 7
如果后面的确定数比x大,说明最后一个?可以等于x的对应位,答案加1,等于不管。
var
s1,s2:string;
l,ans:longint;
b:boolean;
procedure main;
var
i,j,sum,k:longint;
begin
l:=length(s1);
k:=0;ans:=0;
fori:=1 to l do
ifs1[i]='?' then inc(k);
b:=true;
fori:=1 to l do
ifs1[i]='?' then
begin
sum:=1;
for j:=1 to k-1 do
sum:=sum*10;
if b then sum:=sum*(9-(ord(s2[i])-48)) else
begin
sum:=sum*10;
write(ans+sum);
halt;
end;
ans:=ans+sum;
dec(k);
end else
begin
if (s2[i]>s1[i]) and b then
begin
writeln(ans);
halt;
end;
if s2[i]<s1[i] then b:=false;
end;
end;
begin
readln(s1);
readln(s2);
main;
if notb then writeln(ans+1)
else writeln(ans);
end.