// #pragma optimize ("g",on)
// #pragma GCC optimize ("inline")
// #pragma GCC optimize ("Ofast")
// #pragma GCC optimize ("unroll-loops")
// #pragma GCC optimize ("03")
#include <bits/stdc++.h>
#define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
#define int long long
#define all(v) v.begin(),v.end()
using namespace std;
// mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e5 + 1, MX = 40, inf = 1e18, p = 11, p1 = 17, mod = 1e9 + 7, mod1 = 998244353;
int cnt[MX][MX][MX][MX] = {};
void solve(){
int n, d;
cin >> n >> d;
int ans = 0;
auto f = [&](char c){
if(c >= '0' && c <= '9') return (c - '0' + 1);
else return (c - 'a' + 11);
};
for(int i = 0; i < n; i++){
string s;
cin >> s;
for(int mask = 0; mask < (1ll << 4); mask++){
int h = 0;
int ps[4] = {};
vector<int> v;
for(int j = 0; j < 4; j++){
if((mask >> j) & 1){
h++;
ps[j] = f(s[j]);
}
else v.push_back(j);
}
if(v.size() != d) continue;
for(int mask1 = 0; mask1 < (1ll << v.size()); mask1++){
int ps1[4];
for(int j = 0; j < 4; j++) ps1[j] = ps[j];
int b = 0;
for(int j = 0; j < v.size(); j++){
if((mask1 >> j) & 1){
ps1[v[j]] = f(s[v[j]]);
b++;
}
}
if(b % 2 == 0) ans += cnt[ps1[0]][ps1[1]][ps1[2]][ps1[3]];
else ans -= cnt[ps1[0]][ps1[1]][ps1[2]][ps1[3]];
}
}
for(int mask = 0; mask < (1ll << 4); mask++){
int ps[4] = {};
for(int j = 0; j < 4; j++){
if((mask >> j) & 1){
ps[j] = f(s[j]);
}
}
cnt[ps[0]][ps[1]][ps[2]][ps[3]]++;
}
}
cout << ans << '\n';
}
signed main(){
SS
// freopen("trains.in", "r", stdin);
// freopen("trains.out", "w", stdout);
int t = 1;
// cin >> t;
while(t--){
solve();
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |