Submission #95273

#TimeUsernameProblemLanguageResultExecution timeMemory
95273rkocharyanPalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
2 ms636 KiB
#include <bits/stdc++.h> using namespace std; const int N = 20; int n; long long dp[N][N][N][2][2]; string s; long long calc(int pos, int c1, int c2, int f, int z) { if(pos == n) return 1; auto &res = dp[pos][c1][c2][f][z]; if(res != -1) { return res; } res = 0; int lmt = f ? 9 : s[pos] - '0'; for(int i = 0; i <= lmt; i++) { if(i == c1 || i == c2) continue; if(z + i == 0) { res += calc(pos + 1, 10, 10, 1, 0); } else { res += calc(pos + 1, c2, i, f | (i < lmt), 1); } } return res; } long long solve(string &x) { s = x; n = (int) x.size(); memset(dp, -1, sizeof dp); return calc(0, 10, 10, 0, 0); } bool check(long long x) { string s = to_string(x); int m = (int) s.size(); for(int i = 0; i < m - 1; i++) { if(s[i] == s[i + 1]) { return 0; } } for(int i = 0; i < m - 2; i++) { if(s[i] == s[i + 2]) { return 0; } } return 1; } long long brute(long long l, long long r) { int ans = 0; for(long long i = l + 1; i <= r; i++) { ans += check(i); } return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); long long l, r; cin >> l >> r; l--; string a, b; a = to_string(l); b = to_string(r); cout << solve(b) - (l >= 0 ? solve(a) : 0) << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...