제출 #1295621

#제출 시각아이디문제언어결과실행 시간메모리
1295621bakhtiyarnPalindrome-Free Numbers (BOI13_numbers)C++20
17.08 / 100
1097 ms700 KiB
#include <bits/stdc++.h> using namespace std; #define int long long void TLE() { TLE(); } 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, eight = 1; while(rest--) eight *= 8; int res = 0; for(char j='0'; j<='9'; j++){ if(j == last_1 or j == last_2) continue; res += eight; } return res; } if(lit){ int res = 0; for(char j=a[i]+1; j<='9'; j++){ if(j == last_1 or j == last_2) continue; res += dfs(i+1, true, true, last_2, j); } if(a[i] != last_2 and a[i] != last_1) res += dfs(i+1, false, true, last_2, a[i]); return res; } if(big){ int res = 0; for(char j='0'; j<b[i]; j++){ if(j == last_1 or j == last_2) continue; res += dfs(i+1, true, true, last_2, j); } if(b[i] != last_2 and b[i] != last_1) res += dfs(i+1, true, false, last_2, b[i]); return res; } if(a[i] == b[i]) { if(last_1 == a[i] or last_2 == a[i]) { cout << 0; exit(0); } return dfs(i+1, false, false, last_2, a[i]); } int res = 0; for(char j=a[i]+1; j<b[i]; j++){ if(j == last_1 or j == last_2) continue; res += dfs(i+1, true, true, last_2, j); } 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(){ int x, y; cin >> x >> y; int ans = 0; for(int i=x; i<=y; i++){ string k = to_string(i); bool is = true; for(int j=1; j<k.size(); j++){ if(k[j] == k[j-1]) is = false; if(j>1 and k[j] == k[j-2]) is = false; } if(is) ans++; } a = to_string(x); b = to_string(y); while(a.size() < b.size()) a = '0' + a; if(ans != dfs(0, false, false, '%', '&')) TLE(); cout << dfs(0, false, false, '%', '&'); } 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...