Submission #1098063

#TimeUsernameProblemLanguageResultExecution timeMemory
1098063Alihan_8Palindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
1 ms360 KiB
#include <bits/stdc++.h> using namespace std; using i64 = long long; signed main(){ i64 a, b; cin >> a >> b; auto f = [&](i64 x) -> i64{ if ( x < 0 ) return 0; string s = to_string(x); int n = s.size(); for ( auto &x: s ) x -= '0'; i64 dp[n][11][11][2][2]{}; for ( int j = 1; j <= s[0]; j++ ){ dp[0][10][j][j < s[0]][1] = 1; } dp[0][10][10][s[0] > 0][0] = 1; for ( int i = 1; i < n; i++ ){ for ( int j = 0; j <= 10; j++ ){ for ( int k = 0; k <= 10; k++ ){ for ( int c = 0; c <= 10; c++ ){ for ( auto g: {0, 1} ){ if ( g > 0 ){ if ( c == 10 || c == k || c == j ) continue; for ( auto l: {0, 1} ){ if ( !l && c > s[i] ) continue; int nxt = l || (c < s[i]); dp[i][k][c][nxt][1] += dp[i - 1][j][k][l][1]; } } else{ if ( !c ) continue; for ( auto l: {0, 1} ){ if ( !l && c > s[i] && c != 10 ) continue; int nxt = l || (c < s[i]) || (c == 10 && s[i]), f = (c != 10); dp[i][k][c][nxt][f] += dp[i - 1][j][k][l][0]; } } } } } } } i64 cnt = 1; for ( int x = 0; x <= 10; x++ ){ for ( int y = 0; y <= 10; y++ ){ for ( auto f: {0, 1} ){ cnt += dp[n - 1][x][y][f][1]; } } } return cnt; }; cout << f(b) - f(a - 1) << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...