社区讨论
萌新求助为什么60
P3413SAC#1 - 萌数参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo33r47a
- 此快照首次捕获于
- 2023/10/24 00:18 2 年前
- 此快照最后确认于
- 2023/10/24 00:18 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
const int p=1e9+7;
#define rep(i,a,b) for(int i=a;i<=b;i++)
int dp[1010][11][11][2][2];
int a[1010];
int DP(int pos,
int ls,int lls,
int lim,int qd0)
{
if(pos<0){
return !qd0;
}
if(dp[pos][ls][lls][lim][qd0]!=-1){
return dp[pos][ls][lls][lim][qd0];
}
int res=lim?a[pos]:9;
int ret=0;
rep(i,0,res){
if(i==ls||i==lls){
continue;
}
if(qd0&&i==0)
ret+=DP(pos-1,10,10,lim&&(i==a[pos]),qd0&&(!i));
else ret+=DP(pos-1,i,ls,lim&&(i==a[pos]),qd0&&(!i));
ret%=p;
}
return dp[pos][ls][lls][lim][qd0]=ret;
}
int solve(char arr[],int len){
rep(i,1,len){
a[len-i]=arr[i]-'0';
}
memset(dp,-1,sizeof dp);
return DP(len-1,10,10,1,1);
}
char arr[1010];
int meng(int s){
rep(i,2,s){
if(arr[i]==arr[i-1])return 1;
if(i>2&&arr[i]==arr[i-2])return 1;
}
return 0;
}
signed main(){
scanf("%s",arr+1);
int s=strlen(arr+1);
auto x=solve(arr,s);
int good=meng(s);
int w=0;
rep(i,1,s){
w=(w*10%p+arr[i]-'0')%p;
}
x=(w-x)%p+p;x%=p;
scanf("%s",arr+1);
s=strlen(arr+1);
auto y=solve(arr,s);
w=0;
rep(i,1,s){
w=(w*10%p+arr[i]-'0')%p;
}
y=(w-y)%p+p;y%=p;
cout<<((y-x+good)%p+p)%p;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...