Submission #1296666

#TimeUsernameProblemLanguageResultExecution timeMemory
1296666dashkaPalindrome-Free Numbers (BOI13_numbers)C++20
100 / 100
1 ms588 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long

void TLE() { TLE(); }
string a, b; 
int fir;

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) {
      if(i <= fir) res += dfs(i+1, false, true, last_2, '%');
      else 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]) {
    if(i == 0 and a[i] == '0') res += dfs(i+1, false, true, '&', '%');
    else 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;
  
  fir = a.size();
  for(int i=0; i<a.size(); i++){
    if(a[i] != '0'){
      fir = i-1;
      break;
    }
  }
  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...