Bobbie edited 1 年,7 月前
我不知道为什么只能过一个数据
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1e9+7;
char s[2020];
int c[10][2020];
int cal(int x, int y)
{
long long ans=1;
for(int i=1;i<=y;i++,x--)
ans=(ans*x/i)%N;
return (int) ans;
}
int main()
{
scanf("%s",s+1);
int size=strlen(s+1);
for(int i=1;i<=size;i++)
{
int t=s[i]-'0';
for(int j=0;j<10;j++)
if(j==t) c[j][i]=i;
else c[j][i]=c[j][i-1];
}
int times;
cin>>times;
while(times--)
{
long long res=0;
int lenth;
int qqqq;
int x,y;
int cur;
cin>>lenth>>qqqq;
if(lenth>2000)
{
cout << "0" << endl;
continue;
}
x=qqqq/10,y=qqqq%10;
bool pd=false;
if(x!=y)
for(int i=1;i<=size;i++)
{
if(s[i]-'0'==y)
{
int t=i;
while(c[x][t]>=lenth-1)
{
//cout<<c[x][t]-1<<" "<<lenth-2<<endl;
res=(res+cal(c[x][t]-1,lenth-2))%N;
t=c[x][c[x][t]-1];
}
}
}
else
for(int i=1;i<=size;i++)
{
if(s[i]-'0'==y && pd)
{
int t=i;
while(c[x][c[x][t]-1]>=lenth-1)
{
//cout<<c[x][c[x][t]-1]-1<<" "<<lenth-2<<endl;
res=(res+cal(c[x][c[x][t]-1]-1,lenth-2))%N;
t=c[x][c[x][t]-1];
if(t==cur) break;
}
}
if(s[i]-'0'==y) pd=true,cur=i;
}
cout<<res<<endl;
}
return 0;
}