結果
問題 | No.2783 4-33 Easy |
ユーザー |
![]() |
提出日時 | 2024-06-14 21:53:12 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 60 ms / 2,000 ms |
コード長 | 1,447 bytes |
コンパイル時間 | 4,696 ms |
コンパイル使用メモリ | 274,708 KB |
実行使用メモリ | 34,560 KB |
最終ジャッジ日時 | 2024-06-14 21:53:20 |
合計ジャッジ時間 | 7,103 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
#include <stdio.h> #include <bits/stdc++.h> #include <atcoder/all> using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000001 #define Inf64 1000000000000000001 auto get(vector<int> a,vector<int> b,vector<bool> f){ int n = a.size(); vector dp(n+1,vector(9,vector(5,vector<mint>(34,0)))); dp[0][0][0][0] = 1; rep(i,n){ rep(j,9){ rep(k,5){ rep(l,34){ dp[i+1][j][k][l] += dp[i][j][k][l]; if(f[i])continue; int nj = j+1,nk = k + a[i],nl = l+b[i]; if(nj<9&&nk<5&&nl<34){ dp[i+1][nj][nk][nl] += dp[i][j][k][l]; } } } } } return dp; } int main(){ int n; cin>>n; vector<int> a(n); rep(i,n)cin>>a[i]; vector<int> b(n); vector<bool> f(n,false); rep(i,n){ string t; cin>>t; t.insert(t.begin(),'0'); if(t[t.size()-1]=='X'){ f[i] = true; t.pop_back(); } b[i] = stoi(t); } auto x = get(a,b,f); reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); reverse(f.begin(),f.end()); auto y = get(a,b,f); reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); reverse(f.begin(),f.end()); mint ans = 0; rep(i,n){ rep(j,9){ rep(k,5){ rep(l,34){ if(k+a[i]>=5||l+b[i]>=34)continue; mint v = x[i][j][k][l] * y[n-1-i][8-j][4-k-a[i]][33-l-b[i]]; //cout<<v.val()<<endl; if(f[i]&&b[i]==0)ans += v; } } } } cout<<ans.val()<<endl; return 0; }