Untitled
raw download clone
C
views 32
,
size 1415 b
#include <stdio.h>
#include <string.h>
#define MOD 1000000007
int t;
long long int x;
char str[],str2[];




long long int run(void){
    long long int add,l,l2;
    l=strlen(str);
    l2=strlen(str);
    for(long long int i=0;i<x;i++){
        long long int a=l;
        add=(((l-i-1)%MOD)*((str[i]-'1')%MOD))%MOD;  //新加入長度
        l=(add+l)%MOD;   //總長度
        if(l2<=x&&str[i]-'1'>0){           //字串儲存條件判斷
            for(long long int j=i+1;j<=a;j++){
                int k=0;
                str2[k]=str[j];   //把需要重複的區塊存到str2
                k++;
            }
            for(long long int j=1;j<=str[i]-'1';j++){
                strcat(str,str2);    //將str2字串儲存到str內
                l2=strlen(str);    //記錄現在str長度
                if(l2>x)      //超過x就跳出迴圈不必再建字串
                    break;
            }
        }
        if(l<0){
            l=l+MOD;
        }
    }
    return l;
}




int main(int argc, const char * argv[]) {
    scanf("%d %lld",&t,&x);
    for(int i=0;i<510;i++){
        scanf("%ch",&str[i]);
    }
    for(int i=0;i<t;i++){
    printf("%lld\n",run());
}
    return 0;
}
close fullscreen
Login or Register to edit or fork this paste. It's free.