結果
問題 | No.2291 Union Find Estimate |
ユーザー |
![]() |
提出日時 | 2023-05-05 21:29:39 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 308 ms / 2,000 ms |
コード長 | 816 bytes |
コンパイル時間 | 4,284 ms |
コンパイル使用メモリ | 254,936 KB |
最終ジャッジ日時 | 2025-02-12 17:35:03 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
#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 4000000000000000001int main(){int w,h;cin>>w>>h;vector<int> cur(w,0);dsu D(w);rep(i,h){string s;cin>>s;dsu nD = D;vector<int> last(26,-1);rep(j,w){if(isdigit(s[j]))cur[j] |= 1<<(s[j]-'0');if(islower(s[j])){int c = s[j]-'a';if(last[c]!=-1)nD.merge(last[c],j);last[c] = j;}}D = nD;mint ans = 1;auto g = D.groups();rep(j,g.size()){int v = 0;rep(k,g[j].size())v |= cur[g[j][k]];if(v==0)ans *= 10;else if(__builtin_popcount(v)==1)ans *= 1;else ans *= 0;}cout<<ans.val()<<endl;}return 0;}