E - Duplicate Editorial by nesya

楽な実装

公式解説ではランレングス圧縮を用いていますが、使わなくても実装できます。詳しくは以下の実装例を参照してください。

  • 実装例(C++)
#include <bits/stdc++.h>
using namespace std;
#include "atcoder/modint.hpp"
using mint = atcoder::modint998244353;

int main() {
  int N;
  string S;
  cin >> N >> S;
  for(int i=0; i+1<N; i++){
    if(S[i]!='1' && S[i+1]!='1'){
      cout << "-1";
      return 0;
    }
  }
  mint ans=0;
  for(int i=N-1; i>=1; i--){
    ans++; //S[i]を消すのに1手かかる
    ans += ans*(S[i]-'1'); //S[i]によって増える'1'の個数をansに加算
  }
  cout << ans.val();
  return 0;
}

posted:
last update: