Advertisement
MinhNGUYEN2k4

Untitled

Nov 30th, 2020
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.40 KB | None | 0 0
  1. //303595776
  2. #define TASK "FLOWER"
  3. #include <bits/stdc++.h>
  4. #define int long long
  5. #define ii pair<int, int>
  6. #define fi first
  7. #define se second
  8. #define ENDL "\n"
  9. using namespace std;
  10.  
  11. const int MAX = 55;
  12. const int MOD = 1e9+7;
  13.  
  14. int n, m, k, f[MAX][MAX];
  15.  
  16. bool getBit(int x, int k){
  17.     return 1 & (x >> (k-1));
  18. }
  19.  
  20. int Pow(int x, int k){
  21.     if (k==1) return x;
  22.     long long tmp = Pow(x, k/2);
  23.     tmp = (tmp*tmp)% MOD;
  24.     if (k&1) tmp= (tmp*x)%MOD;
  25.     return tmp;
  26. }
  27.  
  28. signed main(int argc, char const *argv[])
  29. {
  30.     ios_base::sync_with_stdio(0);
  31.     cin.tie(0); cout.tie(0);
  32.  
  33.     #ifndef ONLINE_JUDGE
  34.         //freopen("input.txt","r",stdin);
  35.         freopen(TASK".INP","r", stdin);
  36.         freopen(TASK".OUT","w", stdout);
  37.     #endif
  38.  
  39.     cin >> m >> n >> k;
  40.     f[0][0] = 1;
  41.     int MSK = 1 << 4;
  42.     for(int i=1; i<=n; i++){
  43.         for(int mask = 0; mask < MSK; mask++){
  44.             f[i][mask] += f[i-1][mask]* __builtin_popcount(mask);
  45.             f[i][mask]%= MOD;
  46.             for(int j=1; j<=4; j++){
  47.                 if (!getBit(mask, j)){
  48.                     f[i][mask|(1<<(j-1))] += f[i-1][mask];
  49.                     f[i][mask|(1<<(j-1))]%= MOD;
  50.                 }
  51.             }
  52.         }
  53.     }
  54.     int res=0;
  55.     for(int i=0; i<MSK; i++){
  56.         if (__builtin_popcount(i)>=k){
  57.             res+= f[n][i];
  58.             res%= MOD;
  59.         }
  60.     }
  61.     cout << Pow(res, m);
  62.     return 0;
  63. }
  64.  
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement