Team Tic Tac Toe
题面


题意
3*3的矩阵中填26个字母。一种字母站满一行或一列或对角线。则cnt1++;
2个相同字母和一个不同的站满一行或一列或对角线,则cnt2++;
分析
这题数据范围是非常非常小,所以暴力枚举所有结果就可以了。
具体可以看代码。
AC代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
char a[4][4];
pair<char,char>d[100];
int vis[1000],n=0,q=0,v=0,cnt=0;
int main(){
cin>>a[1][1]>>a[1][2]>>a[1][3]>>a[2][1]>>a[2][2]>>a[2][3]>>a[3][1]>>a[3][2]>>a[3][3];
for(int i=1;i<=3;i++){
     for(int j=1;j<=3;j++){
         if(vis[a[i][j]]==0)
           {vis[a[i][j]]=1;n++;}
}//统计一共有多少种不同的字母
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=3;i++){
         if(a[i][1]==a[i][2]&&a[i][1]==a[i][3]&&vis[a[i][1]]==0)
                  { q++;vis[a[i][1]]=1;}
}

for(int j=1;j<=3;j++){
if(a[1][j]==a[2][j]&&a[1][j]==a[3][j]&&vis[a[1][j]]==0)
 { q++;vis[a[1][j]]=1;}
}
if(a[1][1]==a[2][2]&&a[1][1]==a[3][3]&&vis[a[1][1]]==0)
 { q++;vis[a[1][1]]=1;}
if(a[1][3]==a[2][2]&&a[1][3]==a[3][1]&&vis[a[1][3]]==0)
 { q++;vis[a[1][3]]=1;}
cout<<q<<endl;

int j;
for(int i=1;i<=3;i++){
 if(a[i][1]==a[i][2]&&a[i][1]==a[i][3]) continue;
    if(a[i][1]==a[i][2]) {{for( j=1;j<=cnt;j++) if(a[i][1]==d[j].first&&a[i][3]==d[j].second||a[i][3]==d[j].first&&a[i][1]==d[j].second) break;} if(j==cnt+1) {cnt++;d[cnt].first=a[i][1];d[cnt].second=a[i][3];v++;}}
    if(a[i][1]==a[i][3]) {{for( j=1;j<=cnt;j++) if(a[i][1]==d[j].first&&a[i][2]==d[j].second||a[i][2]==d[j].first&&a[i][1]==d[j].second) break;}  if(j==cnt+1){cnt++;d[cnt].first=a[i][1];d[cnt].second=a[i][2];v++;}}
    if(a[i][3]==a[i][2]) {{for( j=1;j<=cnt;j++) if(a[i][1]==d[j].first&&a[i][3]==d[j].second||a[i][3]==d[j].first&&a[i][1]==d[j].second) break;}  if(j==cnt+1){ cnt++;d[cnt].first=a[i][1];d[cnt].second=a[i][3];v++;}}
}

for(int q=1;q<=3;q++){
if(a[1][q]==a[2][q]&&a[1][q]==a[3][q])  continue;
    if(a[1][q]==a[2][q]) {{for( j=1;j<=cnt;j++) if(a[1][q]==d[j].first&&a[3][q]==d[j].second||a[3][q]==d[j].first&&a[1][q]==d[j].second) break;} if(j==cnt+1) { cnt++;d[cnt].first=a[1][q];d[cnt].second=a[3][q];v++;}}
    if(a[1][q]==a[3][q]) {{for( j=1;j<=cnt;j++) if(a[1][q]==d[j].first&&a[2][q]==d[j].second||a[2][q]==d[j].first&&a[1][q]==d[j].second) break;}   if(j==cnt+1) {cnt++;d[cnt].first=a[1][q];d[cnt].second=a[2][q];v++;}}
    if(a[3][q]==a[2][q]) {{for( j=1;j<=cnt;j++) if(a[1][q]==d[j].first&&a[3][q]==d[j].second||a[3][q]==d[j].first&&a[1][q]==d[j].second) break;} if(j==cnt+1) { cnt++;d[cnt].first=a[1][q];d[cnt].second=a[3][q];v++;}}
}

if(a[1][1]==a[2][2]&&a[1][1]==a[3][3]) ;
else{
 if(a[1][1]==a[2][2]) {{for( j=1;j<=cnt;j++) if(a[1][1]==d[j].first&&a[3][3]==d[j].second||a[3][3]==d[j].first&&a[1][1]==d[j].second) break;}  if(j==cnt+1) {cnt++;d[cnt].first=a[1][1];d[cnt].second=a[3][3];v++;}}
    if(a[1][1]==a[3][3]) {{for( j=1;j<=cnt;j++) if(a[1][1]==d[j].first&&a[2][2]==d[j].second||a[2][2]==d[j].first&&a[1][1]==d[j].second) break;}  if(j==cnt+1) {cnt++;d[cnt].first=a[1][1];d[cnt].second=a[2][2];v++;}}
    if(a[2][2]==a[3][3]) {{for( j=1;j<=cnt;j++) if(a[1][1]==d[j].first&&a[3][3]==d[j].second||a[3][3]==d[j].first&&a[1][1]==d[j].second) break;} if(j==cnt+1) { cnt++;d[cnt].first=a[1][1];d[cnt].second=a[3][3];v++;}}
}

if(a[1][3]==a[2][2]&&a[1][3]==a[3][1]) ;
else {
 if(a[1][3]==a[2][2]) {{for( j=1;j<=cnt;j++) if(a[1][3]==d[j].first&&a[3][1]==d[j].second||a[3][1]==d[j].first&&a[1][3]==d[j].second) break;}  if(j==cnt+1) {cnt++;d[cnt].first=a[1][3];d[cnt].second=a[3][1];v++;}}
    if(a[1][3]==a[3][1]) {{for( j=1;j<=cnt;j++) if(a[1][3]==d[j].first&&a[2][2]==d[j].second||a[2][2]==d[j].first&&a[1][3]==d[j].second) break;} if(j==cnt+1) {cnt++;d[cnt].first=a[1][3];d[cnt].second=a[2][2];v++;}}
    if(a[2][2]==a[3][1]) {{for( j=1;j<=cnt;j++) if(a[1][3]==d[j].first&&a[3][1]==d[j].second||a[3][1]==d[j].first&&a[1][3]==d[j].second) break;}  if(j==cnt+1) {cnt++;d[cnt].first=a[1][3];d[cnt].second=a[3][1];v++;}}
}
cout<<v<<endl;
return 0;
}