제출 #1339478

#제출 시각아이디문제언어결과실행 시간메모리
1339478po_rag526Parametriziran (COCI19_parametriziran)C++17
110 / 110
629 ms5332 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

map<int, int> mp;
string s[50005];
vector<string> mask[65];
signed main()
{
    int i, n, m;
    cin >> n >> m;
    for (i = 1; i <= n; i++) {
        cin >> s[i];
        int on = 0;
        for (int j = 0; j < m; j++) {
            if (s[i][j] != '?') on += (1 << j);
        }
        mask[on].push_back(s[i]);
    }
    int ans = 0;
    for (int mask1 = 0; mask1 < (1 << m); mask1++) {
        for (int mask2 = 0; mask2 < (1 << m); mask2++) {
            vector<int> indici;
            for (int j = 0; j < m; j++) {
                if (mask1 & mask2 & (1 << j)) {
                    indici.push_back(j);
                }
            }
            mp.clear();
            for (int i = 0; i < mask[mask1].size(); i++) {
                string s1 = mask[mask1][i];
                int nr = 0;
                for (int ind : indici) {
                    nr = nr * 26 + s1[ind] - 'a';
                }
                mp[nr]++;
            }
            for (int i = 0; i < mask[mask2].size(); i++) {
                string s1 = mask[mask2][i];
                int nr = 0;
                for (int ind : indici) {
                    nr = nr * 26 + s1[ind] - 'a';
                }
                ans += mp[nr];
            }
        }
    }
    cout << (ans - n) / 2;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...