이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
#include<string.h>
#include<utility>
#include<set>
#include<cmath>
#include<queue>
#include<deque>
#include<functional>
#include<stack>
#include<limits.h>
#include<iomanip>
#include<unordered_map>
#include<numeric>
#include<tuple>
using namespace std;
#define MOD 1000000007
#define int long long
#define endl '\n'
int solve(int n){
if(n<=0) return n;
string s=to_string(n);
int N=s.size();
int dp[N][11][11][2]={0};
for(int i=0; i<N; i++){
for(int j=1; j<10; j++){
if(i==0&&j==s[i]-'0'){
dp[i][10][j][1]=1;
break;
}
dp[i][10][j][0]=1;
}
if(i==0) continue;
for(int j=0; j<10; j++){
for(int k=0; k<10; k++){
for(int l=0; l<=10; l++){
for(int z=0; z<2; z++){
if(z>0&&j>s[i]-'0') continue;
if(j!=k&&j!=l) dp[i][k][j][z&&(j==s[i]-'0')]+=dp[i-1][l][k][z];
}
}
}
}
}
int ans=0;
for(int i=0; i<=10; i++){
for(int j=0; j<=10; j++){
for(int z=0; z<2; z++){
ans+=dp[N-1][i][j][z];
}
}
}
return ans;
}
void solve(){
int a,b; cin>>a>>b;
cout<<solve(b)-solve(a-1);
}
signed main(){
// freopen("248.in", "r", stdin);
// freopen("248.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t=1;
// cin>>t;
while(t--){
solve();
cout<<endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |