能问问我错在哪里了吗?

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;
}

Comments