fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3. #define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
  4. #define lg2(n) (63-__builtin_clzll(n))
  5. #define mask(n) (1LL << (n))
  6. #define TASK ""
  7. #define openfile(); if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
  8. #define lc(n) (n << 1)
  9. #define rc(n) ((n << 1) | 1)
  10.  
  11. #define fi first
  12. #define se second
  13. #define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
  14. #define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)
  15.  
  16. #define mii map<int,int>
  17. #define umi unordered_map<int, int>
  18. #define pii pair<int,int>
  19. #define vi vector<int>
  20.  
  21. using namespace std;
  22.  
  23. const int oo = 1e18 + 100;
  24. const int mod = 1e9 + 7;
  25. const int nmax = 2e5 + 8;
  26. const int base = 311;
  27.  
  28. int n, m, x, y, k, dp[108][108][15][15];
  29.  
  30. int sol(int i, int i2, int k1, int k2){
  31. if(i == n && i2 == m) return 1;
  32. // if(i > n + 1 || i2 > m + 1) return 0;
  33. if(dp[i][i2][k1][k2] != -1) return dp[i][i2][k1][k2];
  34. int cur = 0;
  35. if(k1 < x && i < n){
  36. cur += sol(i + 1, i2, k1 + 1, 0);
  37. }
  38. if(k2 < y && i2 < m){
  39. cur += sol(i, i2 + 1, 0, k2 + 1);
  40. }
  41. return dp[i][i2][k1][k2] = cur;
  42. }
  43. int ans[208], ok;
  44. void trace(int i, int i2, int k1, int k2){
  45. if(i == n && i2 == m) return;
  46. int cur = 0;
  47. if(i < n && k1 < x) cur = sol(i + 1, i2, k1 + 1, 0);
  48. if(cur >= k){
  49. ans[i + i2 + 1] = 0;
  50. trace(i + 1, i2, k1 + 1, 0);
  51. }
  52. else{
  53. k -= cur;
  54. // if(i2 >= m || k2 >= y || k > sol(i, i2 + 1, 0, k2 + 1)) return void(ok = 1);
  55. ans[i + i2 + 1] = 1;
  56. if(i2 < m && k2 < y) trace(i, i2 + 1, 0, k2 + 1);
  57. }
  58. }
  59.  
  60. main(){
  61. fast;
  62. openfile();
  63. memset(dp, -1, sizeof dp);
  64. cin >> n >> m >> x >> y >> k;
  65. // n = n + m;
  66. cout << sol(0, 0, 0, 0) << endl;
  67. if(k > sol(0, 0, 0, 0)){
  68. return cout << -1, 0;
  69. }
  70. trace(0, 0, 0, 0);
  71. // if(ok) return cout << -1, 0;
  72. for(int i = 1; i <= n + m; ++i){
  73. cout << (ans[i] ? 'H' : 'F');
  74. }
  75. }
  76.  
Success #stdin #stdout 0.01s 24036KB
stdin
Standard input is empty
stdout
1