您将获得两个字符串X和Y,两个字符串长度相等,仅包含小写拉丁字符('a' - 'z')。字符串Y将按字典顺序大于或等于字符串X.您必须输出按字典顺序大于或等于字符串X且按字典顺序小于或等于字符串Y的字符串总数,长度与字符串X相同并包含只有小写拉丁字符('a' - 'z')。因为这样的字符串数量可能很大,所以输出你的答案模数为109 + 7。
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
unsigned long long l=1000000007;
unsigned long long p(int z){
unsigned long long s=1;
for(int k=1;k<=z;k++)
s=(s*26)%l;
return s;
}
int main() {
int n,i,j,k;
unsigned long long sum=0;
scanf("%d",&n);
char X[1000001];
char Y[1000001];
scanf(" %[^\t\n]s",X);
scanf(" %[^\t\n]s",Y);
for(i=0;i<n;i++){
if(X[i]!=Y[i]){
sum=p(n-i);
for(j=i;j<n;j++){
sum=(sum-p(n-j-1)*(X[j]-97)-p(n-j-1)*(122-Y[j])+100*l)%l;
}
break;
}
}
printf("%llu",sum);
return 0;
}
为什么会发生超时以及如何使程序在大于2的输入下运行?