我对这个题目的主要思路就是分别判断每一天边是否出只现了一个元素或者两个元素。
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
char ss[5][5];
bool p1[26];//p1用来表示该牛已经可以赢得比赛了,避免重复计算该牛。
bool p2[26][26];//p2用来表示某两头牛组合是否赢的比赛。
int ans1,ans2;
int main(){
set[HTML_REMOVED] s1;
set[HTML_REMOVED]s2;
for(int i=1;i<=3;i){
for(int j=1;j<=3;j){
cin>>ss[i][j];
}
}
for(int i=1;i<=3;i){
for(int j=1;j<=3;j){
s2.insert(ss[j][i]);
s1.insert(ss[i][j]);
}
if(s1.size()==1&&!p1[(s1.begin())-‘A’]){//把每一头牛映射到数字0到25.
p1[(s1.begin())-‘A’]=true;
ans1;
}
if(s1.size()==2&&!p2[(s1.begin())-‘A’][(s1.begin())-‘A’]){
p2[(s1.begin())-‘A’][(s1.begin())-‘A’]=true;
ans2;
}
if(s2.size()==1&&!p1[(s2.begin())-‘A’]){
ans1;
p1[(s2.begin())-‘A’]=true;
}
if(s2.size()==2&&!p2[(s2.begin())-‘A’][*(s2.begin())-‘A’]){
p2[(s2.begin())-‘A’][(s2.begin())-‘A’]=true;
ans2;
}
s1.clear();
s2.clear();
}
for(int i=1;i<=3;i){
s1.insert(ss[i][i]);
s2.insert(ss[i][3-i+1]);
}
if(s1.size()==1&&!p1[*(s1.begin())-‘A’]){
ans1;
p1[(s1.begin())-‘A’]=true;
}
if(s1.size()==2&&!p2[(s1.begin())-‘A’][(s1.begin())-‘A’]){
p2[(s1.begin())-‘A’][(s1.begin())-‘A’]=true;
ans2;
}
if(s2.size()==1&&!p1[*(s2.begin())-‘A’]){
ans1;
p1[(s2.begin())-‘A’]=true;
}
if(s2.size()==2&&!p2[(s2.begin())-‘A’][*(s2.begin())-‘A’]){
p2[(s2.begin())-‘A’][(s2.begin())-‘A’]=true;
ans2++;
}
cout<<ans1<<endl;
cout<<ans2<<endl;
return 0;
}