Submission #83249

#TimeUsernameProblemLanguageResultExecution timeMemory
83249teomrnPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
3 ms980 KiB
#include <bits/stdc++.h> using namespace std; typedef long long i64; int cifre[20]; i64 dp[20][11][11][2]; i64 solve(i64 nr) { if (nr == 0) return 1; if (nr < 0) return 0; int n = 0; while (nr) { cifre[++n] = nr % 10 + 1; nr /= 10; } reverse(cifre + 1, cifre + n + 1); memset(dp, 0, sizeof dp); dp[0][0][0][1] = 1; for (int i = 1; i <= n; i++) { for (int j = 0; j <= 10; j++) { for (int k = 0; k <= 10; k++) { if ((k == 0 && j != 0) || (k != 0 && k == j) || (j == 0 && k == 1)) continue; /// pozitie ilegala for (int last = 0; last <= 10; last++) { if (last == k && last != 0) continue; if (k == cifre[i]) dp[i][j][k][1] += dp[i - 1][last][j][1]; else if (k < cifre[i]) dp[i][j][k][0] += dp[i - 1][last][j][1]; dp[i][j][k][0] += dp[i - 1][last][j][0]; } } } } i64 ans = 0; for (int j = 0; j <= 10; j++) for (int k = 0; k <= 10; k++) ans += dp[n][j][k][0] + dp[n][j][k][1]; return ans; } int main() { i64 a, b; cin >> a >> b; i64 ans = solve(b); ans -= solve(a - 1); cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...