제출 #1339479

#제출 시각아이디문제언어결과실행 시간메모리
1339479vjudge1Parametriziran (COCI19_parametriziran)C++20
66 / 110
836 ms96416 KiB
#include <bits/stdc++.h>
#pragma GCC optimization("Ofast,unroll-loops")
#pragma GCC optimize("O3")
#pragma GCC target("avx2,popcnt")
using namespace std;

unordered_map<string, int> fr[64];

int main(){

    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n, m, ans = 0;
    cin >> n >> m;
    string s, ss, s2;
    for(int i = 1; i <= n; i++){
        ss = "";
        cin >> s;
        int mask = 0;
        for(int j = 0; j < m; j++){
            if(s[j] != '?'){
                mask ^= (1 << j);
                ss += s[j];
            }
            else if(ss[j] == '?') ss += '#';
        }
        for(int mask2 = 0; mask2 < 1 << m; mask2++){
            s2 = "";
            for(int j = 0; j < m; j++){
                if((mask2 & (1 << j)) && (mask & (1 << j)))
                    s2 += s[j];
                else if(mask2 & (1 << j))
                    s2 += '?';
                else
                    s2 += '#';
            }
            ans += fr[mask2][s2];
        }
        for(int mask2 = 0; mask2 < 1 << m; mask2++){
            if((mask2 & mask) == mask2){
                s2 = "";
                for(int j = 0; j < m; j++){
                    if(mask2 & (1 << j)){
                        s2 += s[j];
                    }
                    else if(mask & (1 << j))
                        s2 += '?';
                    else
                        s2 += '#';
                }
                fr[mask][s2]++;
            }
        }
    }
    cout << ans << '\n';

    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...