Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int MAXN = 5e4;
- int main() {
- fast
- // file_in
- int n, m;
- cin >> n >> m;
- vector<vector<bitset<MAXN>>> mk(m, vector<bitset<MAXN>>(27));
- ll ans = 0;
- bitset<MAXN> res, cur;
- res.set();
- for (int g = 0; g < n; ++g) {
- string s;
- cin >> s;
- for (int i = 0; i < m; ++i) {
- if (s[i] == '?') {
- for (int j = 0; j < 27; ++j) {
- cur |= mk[i][j];
- }
- mk[i][26][g] = 1;
- } else {
- cur |= mk[i][s[i] - 'a'];
- cur |= mk[i][26];
- mk[i][s[i] - 'a'][g] = 1;
- }
- res &= cur;
- cur.reset();
- }
- ans += res.count();
- res.set(); cur.reset();
- }
- cout << ans << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement