제출 #1339480

#제출 시각아이디문제언어결과실행 시간메모리
1339480po_rag526Parametriziran (COCI19_parametriziran)C++20
110 / 110
977 ms3972 KiB
#include <iostream>
#include <map>
#include <vector>

using namespace std;

const int N = 5e4 + 5;
const int M = 6;

int n,m;
string s;
vector<string> vm[1 << M];

void read()
{
    cin >> n >> m;
    for(int i=0;i<n;i++)
    {
        cin >> s;
        int msk = 0;
        for(int j=0; j<m; j++)
        {
            if(s[j] != '?')
                msk += (1 << j);
        }
        vm[msk].push_back(s);
    }
}

void solve()
{
    int ansss = 0;
    for(int msk1 = 0; msk1<(1<<m); msk1++)
    {
        for(int msk2=0; msk2<(1<<m); msk2++)
        {
            map<string, int> okay;
            for(auto var : vm[msk1])
            {
                string curr;
                for(int j=0; j<m; j++)
                {
                    if(msk1 & (1<<j) && msk2 & (1<<j))
                        curr.push_back(var[j]);

                }
                okay[curr]++;
            }
            for(auto var : vm[msk2])
            {
                string curr;
                for(int j=0; j<m; j++)
                {
                    if(msk1 & (1<<j) && msk2 & (1<<j))
                        curr.push_back(var[j]);
                }
                ansss += okay[curr];
            }
        }
    }
    cout<<(ansss - n)/2 <<'\n';
}

int main()
{
    read();
    solve();
    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...