제출 #1339441

#제출 시각아이디문제언어결과실행 시간메모리
1339441vjudge1Parametriziran (COCI19_parametriziran)C++17
0 / 110
18 ms3800 KiB
#include <bits/stdc++.h>

using namespace std;
const int MAXN=1e5;

map<int, int> fr[1<<6];
string s1[MAXN+1];

int main()
{
    int n, m;
    cin>>n>>m;
    long long ans=0;
    for(int _=1; _<=n; _++){
        cin>>s1[_];
    }
    sort(s1+1, s1+n+1, [&](string a, string b){
        int cnt=0;
        int cnt1=0;
        for(int i=0; i<m; i++){
            cnt+=(a[i]!='?');
            cnt1+=(b[i]!='?');
        }
        return cnt<cnt1;
    });
    for(int _=1; _<=n; _++){
        string s=s1[_];
        cout<<s<<"\n";
        for(int mask=0; mask<(1<<m); mask++){
            int x=0;
            int p=1;
            int ok=1;
            for(int i=0; i<m; i++){
                if(mask&(1<<i)){
                    if(s[i]=='?')
                        ok=0;
                    x+=p*(s[i]-'a');
                }
                p*=26;
            }
            if(ok==1){
                if(!fr[mask].empty()){
                    ans+=fr[mask].size();
                }
            }
        }
        int mask=0;
        int x=0;
        int p=1;
        for(int i=0; i<m; i++){
            if(s[i]!='?'){
                mask|=(1<<i);
                x+=p*(s[i]-'a');
            }
            p*=26;
        }
        cout<<ans<<"\n";
        fr[mask][x]++;
    }
    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...