题目描述
小刚有26只兔子,恰好她们名字都以不同的字母开头,所以小刚用每只兔子的名字的首字母来指代她——一个A…Z之间的字母。
这些兔子最近沉迷于井字游戏,但是由于她们并不满足只有两只兔子可以一起玩,她们改编了这个游戏,可以让许多兔子可以一块儿玩!就像常规的井字游戏一样,这个游戏是在一块3×3的棋盘上进行的,只是与仅用X和O不同,每个格子用一个A…Z之间的字母标记,表示占有这个格子的兔子名字的首字母。
以下是一个棋盘的例子:
COW
XXO
ABC
这些兔子会在她们迷惑于如何判断胜负之前就占满这九个格子。显然,就像常规的井字游戏一样,如果任何一只兔子占有了一整行、一整列,或是一整条对角线,那么这只兔子就获胜了。然而,由于兔子认为多兔游戏中这并不容易出现,所以她们决定允许兔子组成两兔一队,如果某一行、一列,或是一条对角线仅包含一队的两只兔子的字母,并且同时包含了这两只兔子(不仅仅是一只)的字母,那么这一队就获胜。
请帮助兔子们判断有多少只兔子或是两只兔子组成的队伍可以获胜。注意棋盘上的同一个格子可能在不同兔子或队伍的获胜中均被用到。
输入格式
输入包含三行,每行三个A…Z之间的字符。
输出格式
输出包含两行。第一行,输出能够获胜的单独的兔子的数量。第二行,输出能够获胜的两只兔子组成的队伍的数量。
样例 #1
样例输入 #1
COW
XXO
ABC
样例输出 #1
0
2
提示
在这个例子中,没有单独的兔子可以获得胜利。但是,如果兔子C和兔子X组队,她们可以通过C−X−C对角线获胜。同样地,如果兔子X和O组队,她们可以通过中间一行取胜。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
char p[27][27];
ll n,m,q1,k,q2,T,s[27],s1[27],s2[27][27],u1,u2;
int main()
{
n++;
cin>>p[1][n];
while(p[1][n]!='\n')
{
n++;
scanf("%c",&p[1][n]);
}
n--;T=n;
for(ll i=1;i<=T;i++)
{
memset(s,0,sizeof(s)); m=0;
if(i==1)
{
for(ll j=1;j<=T;j++)
{
k=int(p[i][j])-64;
if(s[k]==0)
{
s[k]=1;
m=m+1;
if(m==1) u1=k;
if(m==2) u2=k;
}
}
}
if(i!=1)
for(ll j=1;j<=T;j++)
{
cin>>p[i][j];
k=int(p[i][j])-64;
if(s[k]==0)
{
s[k]=1;
m=m+1;
if(m==1) u1=k;
if(m==2) u2=k;
}
}
if(m==2&&s2[u1][u2]==0&&s2[u2][u1]==0) q2++,s2[u1][u2]=1,s2[u2][u1]=1;
if(m==1&&s1[k]==0) q1++,s1[k]=1;
}
for(ll i=1;i<=T;i++)
{
memset(s,0,sizeof(s)); m=0;
for(int j=1;j<=T;j++)
{
k=int(p[j][i])-64;
if(s[k]==0)
{
s[k]=1;
m=m+1;
if(m==1) u1=k;
if(m==2) u2=k;
}
}
if(m==2&&s2[u1][u2]==0&&s2[u2][u1]==0) q2++,s2[u1][u2]=1,s2[u2][u1]=1;
if(m==1&&s1[k]==0) q1++,s1[k]=1;
}
memset(s,0,sizeof(s)); m=0;
for(int i=1;i<=T;i++)
{
k=int(p[i][i])-64;
if(s[k]==0)
{
s[k]=1;
m=m+1;
if(m==1) u1=k;
if(m==2) u2=k;
}
}
if(m==2&&s2[u1][u2]==0&&s2[u2][u1]==0) q2++,s2[u1][u2]=1,s2[u2][u1]=1;
if(m==1&&s1[k]==0) q1++,s1[k]=1;
memset(s,0,sizeof(s));
m=0;
for(int i=1;i<=T;i++)
{
k=int(p[i][n-i+1])-64;
if(s[k]==0)
{
s[k]=1;
m=m+1;
if(m==1) u1=k;
if(m==2) u2=k;
}
}
if(m==2&&s2[u1][u2]==0&&s2[u2][u1]==0) q2++,s2[u1][u2]=1,s2[u2][u1]=1;
if(m==1&&s1[k]==0) q1++,s1[k]=1;
cout<<q1<<endl<<q2;
}