제출 #362307

#제출 시각아이디문제언어결과실행 시간메모리
362307HehehePalindrome-Free Numbers (BOI13_numbers)C++14
100 / 100
3 ms2176 KiB
#include<bits/stdc++.h> //:3 using namespace std; typedef long long LL; #define all(a) (a).begin(), (a).end() #define ff first #define ss second #define pb push_back #define mp make_pair #define pi pair<int, int> #define sz(x) (int)((x).size()) #define int long long /* #define cin in #define cout out ifstream in(".in"); ofstream out(".out"); */ const int dx[] = {0, 1, 0, -1}; const int dy[] = {1, 0, -1, 0}; const LL inf = 2e9; const LL mod = 1e9 + 7; const int N = 2e2 + 11; const LL INF64 = 3e18 + 1; const double eps = 1e-14; const double PI = acos(-1); int n, dp[30][30][30][2][2][2], a[30]; int brut(int x, int y){ int rs = 0; for(int i = x; i <= y; i++){ string s = to_string(i); int bl = 1; if(sz(s) == 2 && s[0] == s[1])bl = 0; for(int j = 2; j < sz(s); j++){ if(s[j] == s[j - 1] || s[j] == s[j - 2] || s[j - 1] == s[j - 2])bl = 0; } rs += bl; } return rs; } int get(string s1, string s2){ memset(dp, 0, sizeof(dp)); int dif = sz(s2) - sz(s1); for(int i = 1; i <= dif; i++)a[i] = 1; n = sz(s2); while(sz(s1) < sz(s2))s1 = '0' + s1; s1 = '.' + s1; s2 = '.' + s2; //cout << s1 << '\n'; //cout << s2 << '\n'; //cout << "a = " << '\n'; //for(int i = 1; i <= n; i++)cout << a[i]; cout << '\n'; dp[0][0][0][0][0][1] = 1; int ans = 0; for(int i = 1; i <= n; i++){ int x = s1[i] - '0', y = s2[i] - '0'; //cout << "pos = " << i << '\n'; for(int smaller = 0; smaller <= 1; smaller++){ for(int bigger = 0; bigger <= 1; bigger++){ for(int all_zero = 0; all_zero <= 1; all_zero++){ for(int A = 0; A <= 9; A++){ for(int B = 0; B <= 9; B++){ for(int C = 0; C <= 9; C++){ if(!smaller && C > y)continue; if(!bigger && C < x)continue; int all_zero1 = all_zero; if(B != 0)all_zero1 = 0; if((i >= 2) && (B == C) && !(a[i - 1] && all_zero1))continue; if((i >= 3) && (A == B) && !(a[i - 1] && all_zero1))continue; if((i >= 3) && (A == C) && !(a[i - 2] && all_zero))continue; //if(dp[i - 1][A][B][smaller][bigger][all_zero])cout << A << ' ' << B << ' ' << C << '\n'; int smaller1 = smaller, bigger1 = bigger; if(C < y)smaller1 = 1; if(C > x)bigger1 = 1; dp[i][B][C][smaller1][bigger1][all_zero1] += dp[i - 1][A][B][smaller][bigger][all_zero]; } } } } } } } for(int A = 0; A <= 9; A++){ for(int B = 0; B <= 9; B++){ for(int smaller = 0; smaller <= 1; smaller++){ for(int bigger = 0; bigger <= 1; bigger++){ for(int all_zero = 0; all_zero <= 1; all_zero++){ ans += dp[n][A][B][smaller][bigger][all_zero]; } } } } } return ans; } void solve(){ string s1, s2; cin >> s1 >> s2; int ans = get(s1, s2); cout << ans << '\n'; } int32_t main(){ ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0); //cout << setptecision(6) << fixed; int T = 1; //cin >> T; while(T--){ solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...