为什么这玩意儿本地编译运行失败,提交可以过……(可能有低级失误没注意到)
#include<cstdio>
#include<algorithm>
inline int read(){
int x=0,f=1;
char ac=getchar();
while(ac<'0'||ac>'9'){
if(ac=='-') f=-1;
ac=getchar();
}
while(ac>='0'&&ac<='9'){
x=(x<<3)+(x<<1)+(ac-'0');
ac=getchar();
}
return x*f;
}
inline long long read2(){
long long x=0,f=1;
char ac=getchar();
while(ac<'0'||ac>'9'){
if(ac=='-') f=-1;
ac=getchar();
}
while(ac>='0'&&ac<='9'){
x=(x<<3)+(x<<1)+(ac-'0');
ac=getchar();
}
return x*f;
}
int l,r,dp[12][12];
int solve(int x){
int cnt,ans,a[12];
cnt=ans=0;
while(x){
a[++cnt]=x%10;
x/=10;
}
for(int i=1;i<cnt;i++){
for(int j=1;j<10;j++){
ans+=dp[i][j]; //位数小于cnt
}
}
for(int i=1;i<a[cnt];i++){
ans+=dp[cnt][i]; //位数等于cnt且最高位小于x的最高位
}
for(int i=cnt-1;i>=1;i--){
for(int j=0;j<a[i];j++){
if(abs(j-a[i+1])>=2) ans+=dp[i][j]; //从第二位开始递推
}
if(abs(a[i]-a[i+1])<2) break;
if(i==1) ans++;
}
return ans;
}
int main(){
int l=read(),r=read();
for(int i=0;i<10;i++){
dp[1][i]=1;
}
for(int i=2;i<=10;i++){
for(int j=0;j<10;j++){
for(int k=0;k<10;k++){
if(abs(j-k)>=2) dp[i][j]+=dp[i-1][k];
}
}
}
printf("%d",solve(r)-solve(l-1));
return 0;
}
``