제출 #77207

#제출 시각아이디문제언어결과실행 시간메모리
77207Flying_dragon_02Palindrome-Free Numbers (BOI13_numbers)C++17
100 / 100
10 ms2300 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair typedef pair<int, int> ii; string a, b, s; long long dp[21][15][15][21][2]; long long f(int pos, int num1, int num2, int fA, int fB) { if(pos == 20) return 1; long long ret = dp[pos][num1][num2][fA][fB]; if(fB) { ret = 0; int l = 0, r = 9; if(fB) r = s[pos] - '0'; for(int i = l; i <= r; i++) { int newA = fA, newB = 0; if(fA == 0 && i > 0) newA = pos; if(fB && i == r) newB = 1; if(newA >= 1 && abs(pos - newA) >= 1 && num1 == i) continue; if(newA >= 1 && abs(pos - newA) >= 2 && num2 == i) continue; ret += f(pos + 1, i, num1, newA, newB); } return ret; } else { if(ret >= 0) return ret; ret = 0; int l = 0, r = 9; for(int i = l; i <= r; i++) { int newA = fA, newB = 0; if(fA == 0 && i > 0) newA = pos; if(newA >= 1 && abs(pos - newA) >= 1 && num1 == i) continue; if(newA >= 1 && abs(pos - newA) >= 2 && num2 == i) continue; ret += f(pos + 1, i, num1, newA, newB); } dp[pos][num1][num2][fA][fB] = ret; return ret; } } long long get(string h) { while(h.length() <= 19) h = "0" + h; s = h; return f(1, 0, 0, 0, 1); } int main() { cin.tie(0), ios::sync_with_stdio(0); //freopen("Numbers.inp", "r", stdin); cin >> a >> b; for(int i = 0; i <= 20; i++) { for(int j = 0; j < 15; j++) { for(int k = 0; k < 15; k++) { for(int l = 0; l <= 20; l++) { for(int o = 0; o < 2; o++) dp[i][j][k][l][o] = -1; } } } } long long ans = get(b) - get(a); int ck = 0; for(int i = 1; i < a.length(); i++) { if(a[i] == a[i - 1]) ck = 1; } for(int i = 2; i < a.length(); i++) { if(a[i] == a[i - 2]) ck = 1; } if(ck == 0) ans++; cout << ans << "\n"; }

컴파일 시 표준 에러 (stderr) 메시지

numbers.cpp: In function 'int main()':
numbers.cpp:73:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 1; i < a.length(); i++) {
                    ~~^~~~~~~~~~~~
numbers.cpp:77:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 2; i < a.length(); i++) {
                    ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...