有点长,请耐心看完
#include <cstdio>
#include <vector>
using namespace std;
char a[4][3];
bool buc[26];
int sz, ans1, ans2;
vector<char> con;
bool IndWin(char n);
bool ParWin(char p, char q);
int main() {
scanf("%s%s%s", a[0], a[1], a[2]);
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
buc[a[i][j] - 'A'] = true;
for (int i = 0; i < 26; ++i)
if (buc[i])
con.push_back(i + 'A');
sz = con.size();
for (int i = 0; i < sz; ++i)
if (IndWin(con[i])) ++ans1;
for (int i = 0; i < sz - 1; ++i)
for (int j = i + 1; j < sz; ++j)
if (ParWin(con[i], con[j])) ++ans2;
printf("%d\n%d", ans1, ans2);
return 0;
}
bool IndWin(char n) {
return (a[0][0] == n && a[1][1] == n && a[2][2] == n) || (a[0][2] == n && a[1][1] == n && a[2][0] == n) || (a[0][0] == n && a[1][0] == n && a[2][0] == n) || (a[0][1] == n && a[1][1] == n && a[2][1] == n) || (a[0][2] == n && a[1][2] == n && a[2][2] == n) || (a[0][0] == n && a[0][1] == n && a[0][2] == n) || (a[1][0] == n && a[1][1] == n && a[1][2] == n) || (a[2][0] == n && a[2][1] == n && a[2][2] == n);
}
bool ParWin(char p, char q) {
return ((a[0][0] == p || a[0][0] == q) && (a[1][1] == p || a[1][1] == q) && (a[2][2] == p || a[2][2] == q)) || ((a[0][2] == p || a[0][2] == q) && (a[1][1] == p || a[1][1] == q) && (a[2][0] == p || a[2][0] == q)) || ((a[0][0] == p || a[0][0] == q) && (a[1][0] == p || a[1][0] == q) && (a[2][0] == p || a[2][0] == q)) || ((a[0][1] == p || a[0][1] == q) && (a[1][1] == p || a[1][1] == q) && (a[2][1] == p || a[2][1] == q)) || ((a[0][2] == p || a[0][2] == q) && (a[1][2] == p || a[1][2] == q) && (a[2][2] == p || a[2][2] == q)) || ((a[0][0] == p || a[0][0] == q) && (a[0][1] == p || a[0][1] == q) && (a[0][2] == p || a[0][2] == q)) || ((a[1][0] == p || a[1][0] == q) && (a[1][1] == p || a[1][1] == q) && (a[1][2] == p || a[1][2] == q)) || ((a[2][0] == p || a[2][0] == q) && (a[2][1] == p || a[2][1] == q) && (a[2][2] == p || a[2][2] == q));
}
评测记录在此