Codeforces Round #390 (Div. 2)-B Ilya and tic-tac-toe game(模拟)

本文介绍了一个4x4图的游戏胜负判断算法。玩家依次在图上放置标记,首位在任一行、列或对角线上形成三个连续相同标记的玩家获胜。文章详细解释了如何通过暴力模拟的方式检查放置一个标记后能否获胜。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一个菜逼的成长。。

题目链接

题目大意:
有一个4*4的图,先手画’x’,后手画’o’,谁先满足在对角线或者横线或竖线上有三个连续的标记,则这个人获胜。
问在这个图上画一个’x’标记,是否可以获胜。

直接暴力模拟这个过程即可。对角线两条,横线一条,竖线一条

#include <bits/stdc++.h>
using namespace std;
#define cl(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define mp make_pair
#define lowbit(x) (x)&(-x)
typedef long long LL;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int maxn = 100 + 10;
char g[5][5];
char s[] = {'x','o'};
bool check(int x,int y,int a)
{
    int cnt = 1;
    for( int i = y - 1; i > 0 && g[x][i] == s[a]; i-- )cnt++;
    for( int i = y + 1; i <= 4 && g[x][i] == s[a]; i++ )cnt++;
    if(cnt >= 3)return true;
    cnt = 1;
    for( int i = x-1; i > 0 && g[i][y] == s[a]; i-- )cnt++;
    for( int i = x+1; i <= 4 && g[i][y] == s[a]; i++ )cnt++;
    if(cnt >= 3)return true;
    cnt = 1;
    for( int i = 1; x-i > 0 && y-i > 0 && g[x-i][y-i] == s[a]; i++ )cnt++;
    for( int i = 1; x+i <= 4 && y+i <= 4 && g[x+i][y+i] == s[a]; i++ )cnt++;
    if(cnt >= 3)return true;
    cnt = 1;
    for( int i = 1; x-i > 0 && y+i <= 4 && g[x-i][y+i] == s[a]; i++ )cnt++;
    for( int i = 1; x+i <= 4 && y-i > 0 && g[x+i][y-i] == s[a]; i++)cnt++;
    if(cnt >= 3)return true;
    return false;
}
int main()
{
    for( int i = 1; i <= 4; i++ ){
        scanf("%s",g[i]+1);
    }
    int flag = 0;
    for( int i = 1; i <= 4; i++ ){
        for( int j = 1; j <= 4; j++ ){
            if(g[i][j] == '.' && check(i,j,0)){
                flag = 1;
                break;
            }
        }
        if(flag)break;
    }
    if(flag)puts("YES");
    else puts("NO");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值