Submission #73556859


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#include <atcoder/modint>
using namespace atcoder;
using mint = modint998244353;
#define rep(i,n) for (int i=0; i<(int)n; i++)

int main(){
  int n,l;
  cin >> n >> l;
  vector<string> s(n),S;
  rep(i,n) cin >> s[i];
  // ほかの文字列に含まれる文字列は無視
  vector<bool> ic(n);
  rep(i,n)rep(j,n){
    if(s[j].size()>s[i].size())rep(k,s[j].size()-s[i].size()+1){
      bool ok=1;
      rep(m,s[i].size())if(s[i][m]!=s[j][m+k]) ok=0;
      if(ok) ic[i]=1;
    }
  }
  rep(i,n)if(!ic[i]) S.push_back(s[i]);
  n=S.size();
  
  // 何文字重複できるか前計算
  vector<vector<vector<int>>> dup(n,vector<vector<int>>(n));
  rep(i,n)rep(j,n){
    int bd=min(S[i].size(),S[j].size());
    rep(k,bd){
      bool ok=1;
      rep(m,k) if(S[i][S[i].size()-k+m]!=S[j][m]) ok=0;
      if(k>0&&ok) dup[i][j].push_back(k);
    }
  }
  
  // DPの遷移(文字列の添え字は0-indexedとなっていて、j=-1はここではj=nとして扱う)
  vector<vector<vector<mint>>> dp(l+1,vector<vector<mint>>(1<<n,vector<mint>(n+1)));
  dp[0][0][n]=1;
  for(int i=1; i<=l; i++){
    rep(t,1<<n)rep(j,n)if(t&(1<<j)){
      if(i<S[j].size()) continue;
      dp[i][t][j]+=dp[i-S[j].size()][t-(1<<j)][n];
      rep(k,n)if((t-(1<<j))&(1<<k)) dp[i][t][j]+=dp[i-S[j].size()][t-(1<<j)][k];
      rep(k,n){
        for(int m:dup[k][j]){
          if((t-(1<<j))&(1<<k)) dp[i][t][j]+=dp[i-S[j].size()+m][t-(1<<j)][k];
          else dp[i][t][j]-=dp[i-S[j].size()+m][t-(1<<j)+(1<<k)][k];
        }
      }
    }
    rep(t,1<<n){
      dp[i][t][n]+=dp[i-1][t][n]*26;
      rep(k,n){
        if(t&(1<<k)) dp[i][t][n]+=dp[i-1][t][k]*26;
        else dp[i][t][n]-=dp[i][t+(1<<k)][k];
      }
    }
  }
  mint ans=0;
  rep(k,n+1) ans+=dp[l][(1<<n)-1][k];
  cout << ans.val() << endl;
}

Submission Info

Submission Time
Task F - All Included
User lescot
Language C++23 (GCC 15.2.0)
Score 550
Code Size 1882 Byte
Status AC
Exec Time 18 ms
Memory 5568 KiB

Compile Error

./Main.cpp: In function 'int main()':
./Main.cpp:6:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    6 | #define rep(i,n) for (int i=0; i<(int)n; i++)
      |                                 ^
./Main.cpp:16:32: note: in expansion of macro 'rep'
   16 |     if(s[j].size()>s[i].size())rep(k,s[j].size()-s[i].size()+1){
      |                                ^~~
./Main.cpp:41:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |       if(i<S[j].size()) continue;
      |          ~^~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 550 / 550
Status
AC × 3
AC × 36
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3576 KiB
00_sample_01.txt AC 1 ms 3656 KiB
00_sample_02.txt AC 1 ms 3580 KiB
01_test_00.txt AC 8 ms 4540 KiB
01_test_01.txt AC 16 ms 5440 KiB
01_test_02.txt AC 16 ms 5368 KiB
01_test_03.txt AC 2 ms 3980 KiB
01_test_04.txt AC 12 ms 5532 KiB
01_test_05.txt AC 10 ms 5356 KiB
01_test_06.txt AC 3 ms 4236 KiB
01_test_07.txt AC 10 ms 5552 KiB
01_test_08.txt AC 10 ms 5244 KiB
01_test_09.txt AC 10 ms 5368 KiB
01_test_10.txt AC 9 ms 5256 KiB
01_test_11.txt AC 9 ms 5404 KiB
01_test_12.txt AC 9 ms 4508 KiB
01_test_13.txt AC 16 ms 5492 KiB
01_test_14.txt AC 13 ms 5568 KiB
01_test_15.txt AC 13 ms 5528 KiB
01_test_16.txt AC 12 ms 5556 KiB
01_test_17.txt AC 12 ms 5564 KiB
01_test_18.txt AC 5 ms 4360 KiB
01_test_19.txt AC 12 ms 5504 KiB
01_test_20.txt AC 1 ms 3612 KiB
01_test_21.txt AC 1 ms 3772 KiB
01_test_22.txt AC 1 ms 3648 KiB
01_test_23.txt AC 1 ms 3764 KiB
01_test_24.txt AC 1 ms 3608 KiB
01_test_25.txt AC 1 ms 3704 KiB
01_test_26.txt AC 1 ms 3452 KiB
01_test_27.txt AC 1 ms 3704 KiB
01_test_28.txt AC 1 ms 3632 KiB
01_test_29.txt AC 1 ms 3784 KiB
01_test_30.txt AC 1 ms 3612 KiB
01_test_31.txt AC 15 ms 5372 KiB
01_test_32.txt AC 18 ms 5568 KiB