Advertisement
Dang_Quan_10_Tin

PLAN

Sep 27th, 2021
912
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #define task "PLAN"
  2.  
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. using ll = long long;
  10. using ld = long double;
  11.  
  12. constexpr int N = 1e1 + 5;
  13. constexpr ll mod = 1e9;
  14. int n, a[N], b[N], m;
  15. int dp[10][11][452][452];
  16. string A, B;
  17.  
  18. void Read()
  19. {
  20.     cin >> n >> A >> B;
  21.     for (int i = 0; i < n; ++i)
  22.         cin >> a[i] >> b[i];
  23. }
  24.  
  25. inline void Add(int &x, int y)
  26. {
  27.     x += y;
  28.     if (x >= mod)
  29.         x -= mod;
  30. }
  31.  
  32. void Solve()
  33. {
  34.     reverse(A.begin(), A.end());
  35.     reverse(B.begin(), B.end());
  36.  
  37.     A.resize(max(A.size(), B.size()), '0');
  38.     B.resize(A.size(), '0');
  39.  
  40.     m = A.size();
  41.  
  42.     dp[0][0][0][0] = 1;
  43.  
  44.     for (int i = 0; i < m; ++i)
  45.     {
  46.         for (int j = 0; j < n; ++j)
  47.             for (int digit = 0; digit < 10; ++digit)
  48.                 for (int t = 0; t <= 450 - digit * a[j]; ++t)
  49.                     for (int h = 0; h <= 450 - digit * b[j]; ++h)
  50.                         Add(dp[i][j + 1][t + a[j] * digit][h + b[j] * digit], dp[i][j][t][h]);
  51.         if (i < m - 1)
  52.             for (int t = 0; t <= 450; ++t)
  53.                 for (int h = 0; h <= 450; ++h)
  54.                     if (t % 10 == A[i] - '0' && h % 10 == B[i] - '0')
  55.                         Add(dp[i + 1][0][t / 10][h / 10], dp[i][n][t][h]);
  56.     }
  57.  
  58.     cout << dp[m - 1][n][A[m - 1] - '0'][B[m - 1] - '0'];
  59. }
  60.  
  61. int32_t main()
  62. {
  63.     ios::sync_with_stdio(0);
  64.     cin.tie(0);
  65.     cout.tie(0);
  66.     if (fopen(task ".INP", "r"))
  67.     {
  68.         freopen(task ".INP", "r", stdin);
  69.         freopen(task ".OUT", "w", stdout);
  70.     }
  71.     Read();
  72.     Solve();
  73. }
  74.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement