Advertisement
Guest User

parcare1

a guest
Apr 25th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream in("parcare1.in");
  6. ofstream out("parcare1.out");
  7.  
  8. #define STATE pair<int,bool>
  9.  
  10. const int NMAX = 20;
  11. const int MOD  = 666013;
  12.  
  13. typedef long long I64;
  14.  
  15. int dp[NMAX+2][NMAX+2][NMAX+2][NMAX+2];
  16. int aux[NMAX+2][NMAX+2][NMAX+2][NMAX+2];
  17. int coloana[NMAX+2][NMAX+2];
  18.  
  19. int N, H, Q;
  20.  
  21. inline void add(int &a, int b)
  22. {
  23.     a += b;
  24.     if( a >= MOD )
  25.         a -= MOD;
  26. }
  27.  
  28. int main()
  29. {
  30.     in >> N >> H >> Q;
  31.     /// dinamica
  32.     dp[0][0][0][0] = 1;
  33.     for( int ind = 1;  ind <= N;  ++ind ) {
  34.         int g;
  35.         in >> g;
  36.         for( int i = 0;  i <= NMAX;  ++i ) for( int x = 0;  x <= NMAX;  ++x )
  37.         for( int j = 0;  j <= NMAX;  ++j ) for( int y = 0;  y <= NMAX;  ++y )
  38.             aux[i][x][j][y] = dp[i][x][j][y];
  39.         for( int i = 0;  i <= NMAX;  ++i ) for( int x = 0;  x <= NMAX;  ++x )
  40.         for( int j = 0;  j <= NMAX;  ++j ) for( int y = 0;  y <= NMAX;  ++y ) {
  41.             dp[i][x][j][y] = aux[i][x][j][y];
  42.             if( i >= g && x > 0 )
  43.                 add(dp[i][x][j][y], 1LL * aux[i - g][x - 1][j][y] * x % MOD);  // cred ca nu e nevoie de modulo aici
  44.             if( j >= g && y > 0 )
  45.                 add(dp[i][x][j][y], 1LL * aux[i][x][j - g][y - 1] * y % MOD);
  46.         }
  47.     }
  48.     /// precalculare
  49.     for( int i = 0;  i <= NMAX;  ++i ) for( int x = 0;  x <= NMAX;  ++x )
  50.     for( int j = 0;  j <= NMAX;  ++j ) for( int y = 0;  y <= NMAX;  ++y )
  51.         add(coloana[i][j], dp[i][x][j][y]);
  52.        
  53.     I64 ans = 1;
  54.     for( int i = 1;  i <= Q;  ++i ) {
  55.         int pos;
  56.         in >> pos;
  57.         ans = 1LL * ans * coloana[pos - 1][H - pos] % MOD;  /// MOD^2 da overflow pe int
  58.     }
  59.     out << ans << '\n';
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement