Submission #1295588

#TimeUsernameProblemLanguageResultExecution timeMemory
1295588bakhtiyarnPalindrome-Free Numbers (BOI13_numbers)C++20
25 / 100
1 ms580 KiB
#include <bits/stdc++.h> using namespace std; #define int long long string a, b; int dfs(int i, bool big, bool lit, char last_1, char last_2){ if(i == b.size()) return 1; if(big and lit){ int rest = b.size()-i-1; if(last_1 == '%') return 9*pow(8, rest); return pow(8, rest+1); } if(lit){ int cnt = '9'-a[i]; if(a[i]+1 <= last_1 and last_1 <= '9') cnt--; if(a[i]+1 <= last_2 and last_2 <= '9') cnt--; if(cnt < 0) cnt = 0; return cnt * dfs(i+1, true, true, last_2, '9') + dfs(i+1, big, lit, last_2, a[i]); } if(big){ int cnt = b[i]-'0'; if('0' <= last_1 and last_1 <= b[i]-1) cnt--; if('0' <= last_2 and last_2 <= b[i]-1) cnt--; if(cnt < 0) cnt = 0; return cnt * dfs(i+1, true, true, last_2, '0') + dfs(i+1, big, lit, last_2, b[i]); } if(a[i] == b[i]) return dfs(i+1, false, false, last_2, a[i]); int res = 0; int cnt = b[i]-a[i]-1; if(a[i]+1 <= last_1 and last_1 <= b[i]-1) cnt--; if(a[i]+1 <= last_2 and last_2 <= b[i]-1 and last_1 != last_2) cnt--; res += dfs(i+1, true, true, last_2, a[i]+1) * cnt; if(last_2 != a[i] and last_1 != a[i]) res += dfs(i+1, false, true, last_2, a[i]); if(last_2 != b[i] and last_1 != b[i]) res += dfs(i+1, true, false, last_2, b[i]); return res; } void solve(){ cin >> a >> b; while(a.size() < b.size()) a = '0' + a; for(int i=0; i<b.size(); i++){ if(a[i] != b[i]) break; if(i and a[i-1] == b[i-1]){ cout << 0; return; } if(i>1 and a[i-2] == b[i-2] and a[i] == a[i-2]){ cout << 0; return; } } cout << dfs(0, false, false, '%', '%') << '\n'; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...