题目
思路:
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define fi first
#define se second
#define lson p << 1
#define rson p << 1 | 1
const int maxn = 1e6 + 5, inf = 1e18, maxm = 4e4 + 5;
const int N = sqrt(1e9) + 1;const int mod = 1e9 + 7;
// const int mod = 998244353;
//const __int128 mod = 212370440130137957LL;
// int a[505][5005];
// bool vis[505][505];int a[maxn], b[maxn];
bool vis[maxn];
string s[maxn];
int n, m;struct Node{int val, id;bool operator<(const Node &u)const{return val < u.val;}
};
// Node c[maxn];int ans[maxn];
int pre[maxn];//long long ? maxn ? n? m?string get(string s, string t){string res;for(int i = 0; i < s.size(); i++){if(s[i] == t[i]){res += s[i];}else{res += char(3 - (s[i] - '0') - (t[i] - '0') + '0');}}return res;
}void solve(){int res = 0;int q, k;int x;cin >> n >> k;for(int i = 1; i <= n; i++){for(int j = 1; j <= k; j++){char ch;cin >> ch;s[i] += ch;}}map<string, int> mp;for(int i = 1; i <= n; i++){for(int j = i + 1; j <= n; j++){string t = get(s[i], s[j]);mp[t]++;}}for(int i = 1; i <= n; i++){res += mp[s[i]] * (mp[s[i]] - 1) / 2;}cout << res << '\n';
} signed main(){ios::sync_with_stdio(0);cin.tie(0);int T = 1;// cin >> T;while (T--){solve();}return 0;
}