結果
問題 | No.189 SUPER HAPPY DAY |
ユーザー |
|
提出日時 | 2021-04-28 02:37:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 96 ms / 5,000 ms |
コード長 | 3,217 bytes |
コンパイル時間 | 1,303 ms |
コンパイル使用メモリ | 128,680 KB |
最終ジャッジ日時 | 2025-01-21 01:33:33 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
#include <map>#include <set>#include <list>#include <cmath>#include <ctime>#include <deque>#include <queue>#include <stack>#include <bitset>#include <cstdio>#include <limits>#include <vector>#include <cstdlib>#include <numeric>#include <sstream>#include <iostream>#include <algorithm>#include <functional>#include <iomanip>#include <unordered_map>#include <memory.h>#include <unordered_set>#include <fstream>#include <random>using namespace std;const long long int MOD = 1e9 + 9;//dp....long long int dp1[205][2001][2];long long int dp2[205][2001][2];int main(void){cin.tie(0);ios::sync_with_stdio(false);string M, D;cin >> M >> D;int n = M.length();int x = M[0] - '0';for (int i = 0; i < x; i++){dp1[1][i][0] += 1;}dp1[1][x][1] += 1;for (int i = 1; i < n; i++){int x = M[i] - '0';for (int j = 0; j <= 9 * n; j++){for (int k = 0; k < 10; k++){if (j + k <= 2000){dp1[i + 1][j + k][0] = ((dp1[i + 1][j + k][0] % MOD) + (dp1[i][j][0] % MOD) % MOD);dp1[i + 1][j + k][0] %= MOD;}}for (int k = 0; k < x; k++){if (j + k <= 2000){dp1[i + 1][j + k][0] = ((dp1[i + 1][j + k][0] % MOD) + (dp1[i][j][1] % MOD) % MOD);dp1[i + 1][j + k][0] %= MOD;}}if (j + x <= 2000){dp1[i + 1][j + x][1] = ((dp1[i + 1][j + x][1] % MOD) + (dp1[i][j][1] % MOD) % MOD);dp1[i + 1][j + x][1] %= MOD;}}}int m = D.length();x = D[0] - '0';for (int i = 0; i < x; i++){dp2[1][i][0] += 1;}dp2[1][x][1] += 1;for (int i = 1; i < m; i++){int x = D[i] - '0';for (int j = 0; j <= 9 * m; j++){for (int k = 0; k < 10; k++){if (j + k <= 2000){dp2[i + 1][j + k][0] = ((dp2[i + 1][j + k][0] % MOD) + (dp2[i][j][0] % MOD) % MOD);dp2[i + 1][j + k][0] %= MOD;}}for (int k = 0; k < x; k++){if (j + k <= 2000){dp2[i + 1][j + k][0] = ((dp2[i + 1][j + k][0] % MOD) + (dp2[i][j][1] % MOD) % MOD);dp2[i + 1][j + k][0] %= MOD;}}if (j + x <= 2000){dp2[i + 1][j + x][1] = ((dp2[i + 1][j + x][1] % MOD) + (dp2[i][j][1] % MOD) % MOD);dp2[i + 1][j + x][1] %= MOD;}}}long long int res = 0;for (int i = 1; i <= 2000; i++){long long int A = dp1[n][i][0] + dp1[n][i][1];long long int B = dp2[m][i][0] + dp2[m][i][1];A %= MOD;B %= MOD;A = ((A % MOD) * (B % MOD) % MOD);A %= MOD;res = ((res % MOD) + (A % MOD) % MOD);res %= MOD;}cout << res << '\n';return 0;}