結果
問題 | No.319 happy b1rthday 2 me |
ユーザー |
|
提出日時 | 2023-02-28 19:42:04 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,314 bytes |
コンパイル時間 | 1,829 ms |
コンパイル使用メモリ | 169,808 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-15 22:15:05 |
合計ジャッジ時間 | 2,775 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 29 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;int main(){ios::sync_with_stdio(false);cin.tie(0);ll A, B;cin >> A >> B;string a = to_string(A - 1), a2 = to_string(A), b = to_string(B);auto f = [&](string s){int n = s.size();ll dp[n + 1][2][10] = {}, dp2[n + 1][2][10] = {}, dp3[n + 1][2][2] = {};dp[0][1][0] = 1;for(int i = 0; i < n; i++){for(int j = 0; j < 2; j++){int r = j ? s[i] - '0' : 9;for(int k = 0; k < 10; k++){if(dp[i][j][k] == 0) continue;for(int l = 0; l <= r; l++){if(k == 1 && l == 2){dp[i + 1][j & (l == r)][l] += dp[i][j][k];dp2[i + 1][j & (l == r)][l] += dp2[i][j][k] + dp[i][j][k];}else{dp[i + 1][j & (l == r)][l] += dp[i][j][k];dp2[i + 1][j & (l == r)][l] += dp2[i][j][k];}}}}}//桁,値がギリギリか,leading_zerodp3[0][1][1] = 1;for(int i = 0; i < n; i++){for(int j = 0; j < 2; j++){int r = j ? s[i] - '0' : 9;if(i == n - 1){for(int k = 2; k <= r && k <= 2; k++){dp3[i + 1][j & (k == r)][0] += dp3[i][j][0];dp3[i + 1][j & (k == r)][0] += dp3[i][j][1];}}else{for(int k = 0; k <= r; k++){dp3[i + 1][j & (k == r)][0] += dp3[i][j][0];if(k == 0){dp3[i + 1][j & (k == r)][1] += dp3[i][j][1];}else if(k == 2){dp3[i + 1][j & (k == r)][0] += dp3[i][j][1];}}}}}ll ans = dp3[n][0][0] + dp3[n][1][0];for(int i = 0; i < 2; i++){for(int j = 0; j < 10; j++){ans += dp2[n][i][j];}}return ans;};cout << f(b) - f(a) - (a.back() == '1' && a2[0] == '2') << '\n';}