Untitled
raw download clone
TEXT
views 20
,
size 1126 b
#include <stdio.h>
#include <string.h>
#define MOD 1000000007
int t;
long long int x;
char str[10000000],str2[10000000];
long long int add,l,l2;
long long int run(void){
    for(long long int i=0;i<x;i++){
        long long int a=l;
        int left=str[i]-'0';
        add=(((l-i-1)%MOD)*(left-1))%MOD;  //新加入長度
        l=(add+l)%MOD;   //總長度
        if(l2<=x&&left>1){           //字串儲存條件判斷
            strncpy(str2,str+(i+1),a-i);
            for(long long int j=1;j<=left-1&&l2<=x;j++){
                strcat(str,str2);    //將str2字串儲存到str內
                l2=l2+(a-i+1);    //記錄現在str長度
            }
        }
        if(l<0){
            l=l+MOD;
        }
    }
    return l;
}
int main(int argc, const char * argv[]) {
    scanf("%d",&t);
    for(int i=0;i<t;i++){
        scanf("%lld",&x);
        scanf("%s",str);
        l=strlen(str);
        l2=l;
        printf("%lld\n",run());
    }
    return 0;
}
close fullscreen
Login or Register to edit or fork this paste. It's free.