枚举列,对每个字母算出存在多少相同的列,然后用组合数算。 #include <iostream> #include <cstring> using namespace std; char data[250][251]; int m, n; int _num[5]; inline int index(char c) { if(c == 'B') return 0; if(c == 'J') return 1; if(c == 'H') return 2; if(c == 'Y') return 3; return 4; } int main() { int t; cin >> t; while(t--) { int ans = 0; cin >> m >> n; for(int i = 0; i < m; i++) { cin >> data[i]; } for(int i = 0; i < n - 1; i++) { for(int j = i + 1; j < n; j++) { memset(_num, 0, sizeof(_num)); for(int k = 0; k < m; k++) { if(data[k][i] == data[k][j]) _num[index(data[k][i])]++; } for(int j = 0; j < 5; j++) ans = ans + _num[j] * (_num[j] - 1) / 2; } } cout << ans << endl; } return 0; }