Submission #384435

#TimeUsernameProblemLanguageResultExecution timeMemory
384435negar_aPipes (BOI13_pipes)C++14
3.89 / 100
2 ms640 KiB
//!yrt tsuj uoy srettam gnihton no emoc #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define pb push_back #define mp make_pair #define pii pair <int, int> #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define F first #define S second ll a, b, ans = 0; ll x, y; string A, B; ll pw(ll x, ll y){ ll res = 1; for(ll i = 0; i < y; i ++){ res *= x; } return res; } bool Y(int l, int r, int m){ return (m > l && m < r); } void solve_s(ll st){ for(ll i = st - 1; i >= 0; i --){ ll t = 9 - (A[i] - '0') - (i < x - 1 && A[i + 1] > A[i]) - (i < x - 2 && A[i + 2] > A[i]); ans += 1LL * t * (i == x - 1 ? 9 * pw(8, i - 1) : pw(8, i)); if(i < x - 1 && A[i] == A[i + 1]){ return; } if(i < x - 2 && A[i] == A[i + 2]){ return; } } if(0 < x - 1 && A[0] == A[1]){ return; } if(0 < x - 2 && A[0] == A[2]){ return; } ans ++; return; } void solve_b(ll st){ for(ll i = st - 1; i >= 0; i --){ ll t = (B[i] - '0' - (i == y - 1)) - (i < y - 1 && B[i + 1] < B[i]) - (i < y - 2 && B[i + 2] < B[i]); ans += 1LL * t * (i == y - 1 ? 9 * pw(8, i - 1) : pw(8, i)); if(i < y - 1 && B[i] == B[i + 1]){ return; } if(i < y - 2 && B[i] == B[i + 2]){ return; } // cout << "ani = " << i << " : " << ans << endl; } if(0 < y - 1 && B[0] == B[1]){ return; } if(0 < y - 2 && B[0] == B[2]){ return; } ans ++; return; } int main(){ fast_io; cin >> a >> b; A = to_string(a); B = to_string(b); x = A.size(), y = B.size(); reverse(A.begin(), A.end()); reverse(B.begin(), B.end()); if(x == y){ assert(0); ll ind = x - 1; while(ind >= 0 && A[ind] == B[ind]){ if(ind < x - 1 && A[ind] == A[ind + 1]){ cout << 0; return 0; } if(ind < x - 2 && A[ind] == A[ind + 2]){ cout << 0; return 0; } ind --; } if(ind >= 0){ ll t = 1LL * (B[ind] - A[ind]) - 1 - (ind + 1 < x && Y(A[ind], B[ind], A[ind + 1])) - (ind + 2 < x && Y(A[ind], B[ind], A[ind + 2])); ans += t * (ind == x - 1 ? 9 * pw(8, ind - 1) : pw(8, ind)); solve_s(ind); solve_b(ind); }else ans = 1; }else{ for(ll i = x + 1; i < y; i ++){ ans += 1LL * 9 * 9 * pw(8, i - 2); } solve_s(x); solve_b(y); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...