#include <bits/stdc++.h>
using namespace std;
const int N=5;
string s[N];
set<set<char>> w[N];
void insert(vector<pair<int, int>> c)
{
set<char> con;
for(auto it: c)
con.insert(s[it.first][it.second]);
//加入分配的牛
w[con.size()].insert(con);
}
int main()
{
for(int i=0; i<3; i++) cin>>s[i];
//行
for(int i=0; i<3; i++)
insert({{i, 0}, {i, 1}, {i, 2}});
//列
for(int i=0; i<3; i++)
insert({{0, i}, {1, i}, {2, i}});
//两条对角线
insert({{0, 0}, {1, 1}, {2, 2}});
insert({{2, 0}, {1, 1}, {0, 2}});
cout<<w[1].size()<<endl<<w[2].size();
return 0;
}
附官方题解
#include <iostream>
using namespace std;
char B[3][3];
// Does 1 cow win?
int cow_wins(char ch)
{
// Check diagonals
if (B[0][0] == ch && B[1][1] == ch && B[2][2] == ch) return 1;
if (B[0][2] == ch && B[1][1] == ch && B[2][0] == ch) return 1;
// Check rows and columns
for (int i=0; i<3; i++) {
if (B[0][i] == ch && B[1][i] == ch && B[2][i] == ch) return 1;
if (B[i][0] == ch && B[i][1] == ch && B[i][2] == ch) return 1;
}
return 0;
}
// Test if a team wins based on 3 characters in a row, column, or diagonal
bool check3(char ch1, char ch2, char a, char b, char c)
{
// All 3 characters have to be either ch1 or ch2
if (a != ch1 && a != ch2) return false;
if (b != ch1 && b != ch2) return false;
if (c != ch1 && c != ch2) return false;
// ch1 and ch2 have to appear at least once each
if (a != ch1 && b != ch1 && c != ch1) return false;
if (a != ch2 && b != ch2 && c != ch2) return false;
return true;
}
// Does a team win?
int team_wins(char ch1, char ch2)
{
// Check diagonals
if (check3(ch1, ch2, B[0][0], B[1][1], B[2][2])) return 1;
if (check3(ch1, ch2, B[0][2], B[1][1], B[2][0])) return 1;
// Check rows and columns
for (int i=0; i<3; i++) {
if (check3(ch1, ch2, B[0][i], B[1][i], B[2][i])) return 1;
if (check3(ch1, ch2, B[i][0], B[i][1], B[i][2])) return 1;
}
return 0;
}
int main()
{
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
cin >> B[i][j];
int answer1 = 0, answer2 = 0;
for (char ch = 'A'; ch <= 'Z'; ch++)
answer1 += cow_wins(ch);
for (char ch1 = 'A'; ch1 <= 'Z'; ch1++)
for (char ch2 = ch1+1; ch2 <= 'Z'; ch2++)
answer2 += team_wins(ch1, ch2);
cout << answer1 << "\n" << answer2 << "\n";
return 0;
}
set<
set<char>
> S怎么理解啊我是这样理解的,里面的每个set代表这个set里面的字母或者字母组合不能重复,比如set1={A,B,C},set2={{A,B},{A, C}, {B, C} };而外面的set是保证里面set的元素维度不能重复,比如你ans[0]表示了单个字母的set集合,那么ans[i]就不能表示单个字母的元素集合了;
理解了,多谢
太强了,set[HTML_REMOVED]>太妙了!大佬还缺腿部挂件吗?真的太妙了,妙得我大半夜无声尖叫!
条理清晰,好厉害
TQL
tql 大佬 Orz
强
\begin{pmatrix}
Orz
\end{pmatrix}
女少口阿
牛哇牛哇,绝绝子
ORZ
Orz
%%%%%%
六啊六啊
看着我135行的代码陷入沉思
看着我150行的代码陷入沉思
if()语句写了快100行,看到你们突然又有神气了哈哈
看着我想了好几天写出来的代码写了删,删了写的AcWing界面深深地陷入思考:我适合学计算机吗
兄弟多刷刷题,多写写代码就好了
简洁!!!
简洁!!!
Orz
简洁 ! ! !