Submission #44221

#TimeUsernameProblemLanguageResultExecution timeMemory
44221neutron_bytePalindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
3 ms1280 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int da[20]; int db[20]; ll memo[20][2][2][10][10][2][2]; ll solve(int idx, bool flagA, bool flagB, int pre1, int pre2, bool zero1, bool zero2) { if (idx == -1) { return 1; } if (memo[idx][flagA][flagB][pre1][pre2][zero1][zero2] != -1) { return memo[idx][flagA][flagB][pre1][pre2][zero1][zero2]; } ll rs = 0; for (int d = 0; d <= 9; ++d) { if (flagA && d < da[idx]) continue; if (flagB && d > db[idx]) continue; if ((!zero1 && pre1 == d) || (!zero2 && pre2 == d)) continue; bool nzero1; if (zero1 && d == 0) nzero1 = true; else nzero1 = false; rs += solve(idx - 1, flagA && d == da[idx], flagB && d == db[idx], d, pre1, nzero1, zero1); } return memo[idx][flagA][flagB][pre1][pre2][zero1][zero2] = rs; } int main() { ll a, b; cin >> a >> b; fill(da, da + 20, 0); fill(db, db + 20, 0); for (int i = 0; i < 20; ++i) { da[i] = a % 10; db[i] = b % 10; a /= 10; b /= 10; } fill(memo[0][0][0][0][0][0], memo[0][0][0][0][0][0] + 32000, -1); cout << solve(19, true, true, 0, 0, true, true) << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...