Advertisement
Guest User

Untitled

a guest
Oct 21st, 2022
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define forn(i, n) for (int i = 0; i < int(n); i++)
  4.  
  5. using namespace std;
  6.  
  7. const int MOD = 998244353;
  8. const int N = int(3e6) + 5;
  9. const int M = 33;
  10.  
  11. bitset<N> fib, s;
  12.  
  13. struct event{
  14.     int i, dx;
  15. };
  16.  
  17. int main() {
  18.     cin.tie(0);
  19.     iostream::sync_with_stdio(false);
  20.    
  21.     array<int, M> len;
  22.     fib[0] = 1;
  23.     fib[1] = 0;
  24.     len[0] = len[1] = 1;
  25.     int k = 2;
  26.     for (int n = 2; n < N; ++k){
  27.         len[k] = len[k - 1] + len[k - 2];
  28.         forn(j, len[k - 1]) if (n < N) fib[n++] = fib[j];
  29.     }
  30.    
  31.     int m = 0;
  32.     int n;
  33.     cin >> n;
  34.     vector<int> q;
  35.     forn(i, n){
  36.         string t;
  37.         cin >> t;
  38.         for (char c : t) s[m++] = c - '0';
  39.         q.push_back((q.empty() ? 0 : q.back()) + t.size());
  40.     }
  41.     reverse(q.begin(), q.end());
  42.    
  43.     array<queue<event>, M> evs;
  44.     int sum = 1;
  45.     forn(i, m + 1){
  46.         int dp = sum;
  47.         forn(j, M) if (!evs[j].empty() && evs[j].front().i == i){
  48.             dp = (dp - evs[j].front().dx + MOD) % MOD;
  49.             evs[j].pop();
  50.         }
  51.         if (i == q.back()){
  52.             cout << dp << "\n";
  53.             q.pop_back();
  54.         }
  55.         if (i){
  56.             sum = (sum + dp) % MOD;
  57.         }
  58.         if (s[i] == 0){
  59.             evs[0].push({i + 1, dp});
  60.             continue;
  61.         }
  62.         int l = 1;
  63.         forn(j, N){
  64.             if (i + j == m || s[i + j] != fib[j]) break;
  65.             if (j == len[l] - 1){
  66.                 evs[l].push({i + len[l], dp});
  67.                 ++l;
  68.             }
  69.         }
  70.     }
  71.     return 0;
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement