我过了带模拟 我好快乐 我是快乐的小熊软糖
吉首大学新生赛的带模拟 下井字棋问自己两步能不能赢
其实也不算很大233
代码长度3185 生涯之耻(不是
注释应该蛮清楚的(挠头
要注意的一点是如果初始局面自己已经获胜了 这个时候算wrong

#include<bits/stdc++.h>
#define pf printf
#define sc(x) scanf("%d", &x)
#define scs(x) scanf("%s", x)
#define scl(x) scanf("%lld", &x)
#define mst(a,x) memset(a, x, sizeof(a))
#define rep(i,s,e) for(int i=s; i<e; ++i)
#define dep(i,e,s) for(int i=e; i>=s; --i)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 5e5 + 5;
char mp[3][3],c,d,t,p;
map<char,int>aaa;
int judge(char x){
    rep(i,0,3) if(mp[i][0]==x&&mp[i][1]==x&&mp[i][2]==x) return 1;
    rep(i,0,3) if(mp[0][i]==x&&mp[1][i]==x&&mp[2][i]==x) return 1;
    if(mp[0][0]==x&&mp[1][1]==x&&mp[2][2]==x) return 1;
    if(mp[0][2]==x&&mp[1][1]==x&&mp[2][0]==x) return 1;
    return 0;
}
int count(char x){
    rep(i,0,3) if((mp[i][0]==x)+(mp[i][1]==x)+(mp[i][2]==x)>=2
    &&(mp[i][0]=='.'||mp[i][1]=='.'||mp[i][2]=='.')) return t=1,p=i,1;
    rep(i,0,3) if((mp[0][i]==x)+(mp[1][i]==x)+(mp[2][i]==x)>=2
    &&(mp[0][i]=='.'||mp[1][i]=='.'||mp[2][i]=='.')) return t=2,p=i,1;
    if((mp[0][0]==x)+(mp[1][1]==x)+(mp[2][2]==x)>=2
    &&(mp[0][0]=='.'||mp[1][1]=='.'||mp[2][2]=='.')) return t=3,1;
    if((mp[2][0]==x)+(mp[1][1]==x)+(mp[0][2]==x)>=2
    &&(mp[2][0]=='.'||mp[1][1]=='.'||mp[0][2]=='.')) return t=4,1;
    return 0;
}
int find(char x){
    rep(i,0,3) if(mp[i][0]!=x&&mp[i][1]!=x&&mp[i][2]!=x) return t=1,p=i,1;
    rep(i,0,3) if(mp[0][i]!=x&&mp[1][i]!=x&&mp[2][i]!=x) return t=2,p=i,1;
    if(mp[0][0]!=x&&mp[1][1]!=x&&mp[2][2]!=x) return t=3,1;
    if(mp[0][2]!=x&&mp[1][1]!=x&&mp[2][0]!=x) return t=4,1;
    return 0;
}
int solve(){
    getchar(); aaa.clear(); rep(i,0,3) rep(j,0,3){
        mp[i][j]=getchar(); aaa[mp[i][j]]++; getchar();
    } c=getchar(); d='o'+'x'-c; if(aaa[c]!=aaa[d]) return puts("wrong!");
    if(!aaa['.']||judge(d)||judge(c)) return puts("wrong!");
    if(aaa['.']==9||aaa[c]==1) return puts("Cannot win!");
    //一种是 自己第一步能赢
    if(count(c)) return puts("LeeLdler win!");
    //一种是 自己不能一步赢 人机能一步赢 先堵人机
    //count d 然后根据t去改mp 改完再去count c 
    if(count(d)){
        if(t==1) rep(i,0,3) if(mp[p][i]=='.') mp[p][i]=c;
        else if(t==2) rep(i,0,3) if(mp[i][p]=='.') mp[p][i]=c;
        else if(t==3) rep(i,0,3) if(mp[i][i]=='.') mp[i][i]=c;
        else rep(i,0,3) if(mp[i][2-i]=='.') mp[i][2-i]=c;
        return puts(count(c)?"LeeLdler win!":"Cannot win!");
    }
    //一种是 自己和人机不能一步赢 下自己的 人机去堵
    //这时候你选的应该是一个空列 指一行只有自己和空位 
    //如果没有空列 肯定赢不了 
    //一个空列有两种情况 两种都判一下 
    if(!find(d)) return puts("Cannot win!"); else{
        int tp1,tp2; if(t==1){
            rep(i,0,3) if(mp[p][i]=='.'){
                mp[p][i]=c,tp1=i; break;
            } rep(i,0,3) if(mp[p][i]=='.'){
                mp[p][i]=d,tp2=i;
            } if(count(c)) return puts("LeeLdler win!");
            mp[p][tp1]=d,mp[p][tp2]=c; 
            if(count(c)) return puts("LeeLdler win!");
            return puts("Cannot win!");
        } else if(t==2){
            rep(i,0,3) if(mp[i][p]=='.'){
                mp[i][p]=c,tp1=i; break;
            } rep(i,0,3) if(mp[i][p]=='.'){
                mp[i][p]=d,tp2=i;
            } if(count(c)) return puts("LeeLdler win!");
            mp[tp1][p]=d,mp[tp2][p]=c; 
            if(count(c)) return puts("LeeLdler win!");
            return puts("Cannot win!");
        } else if(t==3){
            rep(i,0,3) if(mp[i][i]=='.'){
                mp[i][i]=c,tp1=i; break;
            } rep(i,0,3) if(mp[i][i]=='.'){
                mp[i][i]=d,tp2=i;
            } if(count(c)) return puts("LeeLdler win!");
            mp[tp1][tp1]=d,mp[tp2][tp2]=c;
            if(count(c)) return puts("LeeLdler win!");
            return puts("Cannot win!");
        } else{
            rep(i,0,3) if(mp[i][2-i]=='.'){
                mp[i][2-i]=c,tp1=i; break;
            } rep(i,0,3) if(mp[i][2-i]=='.'){
                mp[i][2-i]=d,tp2=i;
            } if(count(c)) return puts("LeeLdler win!");
            mp[tp1][2-tp1]=d,mp[tp2][2-tp2]=c;
            if(count(c)) return puts("LeeLdler win!");
            return puts("Cannot win!");
        }
    } 
}
int main(){
    int _; sc(_); while(_--) solve();
}

哈哈我过了!
写模拟能直接a真的好快乐!!