AcWing 1725. 组队井字游戏
原题链接
简单
作者:
栗子ing
,
2022-04-01 23:08:48
,
所有人可见
,
阅读 891
<=== 既然来了,就给我来个小心心吧
呜呜 ,java的set集合,不能判重pair,好难受,还是我不会QaQ
import java.util.*;
public class Main{
static int N = 26;
static boolean[] st = new boolean[N];
static boolean[][] sts = new boolean[N][N];//二维用来标注一条对角线两头牛
static char[][] a = new char[4][4];
static int res,ans;
public static void find(char a,char b,char c){
//说明是一种牛组成了一排,标记,判重
if (a == b && b == c){
if (!st[a - 'A']){
st[a - 'A'] = true;
res ++;
}
}
//接下来是判断组队的牛,两头牛
if (a == b && a != c){ //第一个数跟第二个数相等
if (!sts[a - 'A'][c - 'A']){
sts[a - 'A'][c - 'A'] = sts[c - 'A'][a - 'A'] = true;//双向标记,因为后面可能来一组反过来的组队牛 AB BA
ans ++;
}
}else if (a == c && a != b){ //第一个数跟第三个数相等
if (!sts[a - 'A'][b - 'A']){
sts[a - 'A'][b - 'A'] = sts[b - 'A'][a - 'A'] = true;
ans ++;
}
}else if (b == c && a != b){ //第二个数跟第三个数相等
if (!sts[a - 'A'][b - 'A']){
sts[a - 'A'][b - 'A'] = sts[b - 'A'][a - 'A'] = true;
ans ++;
}
}
}
public static void main(String[] argrs){
Scanner scan = new Scanner(System.in);
for (int i = 0 ; i < 3 ; i ++ ){
String str = scan.next();
for (int j = 0 ; j < 3 ; j ++ ){
a[i][j] = str.charAt(j);
}
}
//一共有8中情况横竖6中情况 + 交叉2种 8中情况
//横
find(a[0][0],a[0][1],a[0][2]);
find(a[1][0],a[1][1],a[1][2]);
find(a[2][0],a[2][1],a[2][2]);
//竖
find(a[0][0],a[1][0],a[2][0]);
find(a[0][1],a[1][1],a[2][1]);
find(a[0][2],a[1][2],a[2][2]);
//交叉
find(a[0][0],a[1][1],a[2][2]);
find(a[0][2],a[1][1],a[2][0]);
System.out.println(res);
System.out.println(ans);
}
}