AcWing算法提高课-4.1.1格子游戏

算法提高课整理

CSDN个人主页:更好的阅读体验

Start

原题链接
题目描述

Alice 和 Bob 玩了一个古老的游戏:首先画一个 n × n n \times n n×n 的点阵(下图 n = 3 n = 3 n=3 )。

接着,他们两个轮流在相邻的点之间画上红边和蓝边:

1.png

直到围成一个封闭的圈(面积不必为 1 1 1)为止,“封圈”的那个人就是赢家。因为棋盘实在是太大了,他们的游戏实在是太长了!

他们甚至在游戏中都不知道谁赢得了游戏。

于是请你写一个程序,帮助他们计算他们是否结束了游戏?

输入格式

输入数据第一行为两个整数 n n n m m m n n n表示点阵的大小, m m m 表示一共画了 m m m 条线。

以后 m m m 行,每行首先有两个数字 ( x , y ) (x, y) (x,y),代表了画线的起点坐标,接着用空格隔开一个字符,假如字符是 D D D,则是向下连一条边,如果是 R R R 就是向右连一条边。

输入数据不会有重复的边且保证正确。

输出格式

输出一行:在第几步的时候结束。

假如 m m m 步之后也没有结束,则输出一行 draw

数据范围

1 ≤ n ≤ 200 1 \le n \le 200 1n200
1 ≤ m ≤ 24000 1 \le m \le 24000 1m24000

输入样例:
3 5
1 1 D
1 1 R
1 2 D
2 1 R
2 2 D
输出样例:
4

思路

要判断是否成环。注意到如果最终成环,那么最后一次连接的时候两个端点在同一个连通块内。

对于连通块的问题,我们使用并查集解决。

问题解答
  • Q:二维的网格如何放到并查集中?
  • A:一种 trick,对于每个点 ( x , y ) (x,y) (x,y) 建立映射 f ( x , y ) = x × n + y f(x,y)=x\times n+y f(x,y)=x×n+y 即可。这样就建立了一个 0 ∼ n × n − 1 0 \sim n \times n - 1 0n×n1 的映射关系。
算法时间复杂度

m m m 轮操作,并查集均摊复杂度 O ( α ) O(\alpha) O(α),因此这一步 O ( α m ) O(\alpha m) O(αm)

不过考虑到并查集的初始化复杂度为 O ( n 2 ) O(n^2) O(n2),因此预处理是瓶颈。

总复杂度 O ( n 2 ) O(n^2) O(n2)

AC Code

C + + \text{C}++ C++

#include <iostream>

using namespace std;

const int N = 210;

int n, m;
int p[N * N];

int get(int x, int y)
{
    return x * n + y;
}

int find(int x)
{
    if (p[x] != x) p[x] = find(p[x]);
    return p[x];
}

int main()
{
    scanf("%d%d", &n, &m);

    for (int i = 0; i < n * n; i ++ )
        p[i] = i;

    char op;
    int x, y, r1, r2;
    for (int i = 1; i <= m; i ++ )
    {
        cin >> x >> y >> op;
        x -- , y -- ;
        int r1 = get(x, y);
        if (op == 'D') r2 = get(x + 1, y);
        else r2 = get(x, y + 1);

        r1 = find(r1), r2 = find(r2);
        if (r1 == r2)
        {
            printf("%d\n", i);
            exit(0);
        }
        p[r1] = r2;
    }
    puts("draw");

    return 0;
}

228aa7bed3e021faf24cf8560d3e47bb.gif

最后,如果觉得对您有帮助的话,点个赞再走吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261003.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…

css图片属性,图片自适应

CSS 图片属性指南&#xff1a;background-size 和 object-fit 在前端开发中&#xff0c;使用图片是非常常见的。为了让图片在网页中显示得更好&#xff0c;CSS 提供了多种属性来调整和控制图片的大小和布局。其中&#xff0c;background-size 和 object-fit 是两个常用的属性&a…

常见损失函数(Loss Function)

在线性回归中&#xff0c;损失函数&#xff08;Loss Function&#xff09;用于衡量模型的预测值与实际值之间的差异&#xff0c;是优化算法的目标。常见的线性回归损失函数包括&#xff1a; 均方误差&#xff08;Mean Squared Error&#xff0c;MSE&#xff09; 其中&#xff…

Apache+PHP环境配置 手动配置

准备工作&#xff0c;在G盘新建一个WAMP目录 1.获取Apache 打开下载地址Apache VS17 binaries and modules download&#xff0c;下载 httpd-2.4.58-win64-VS17.zip 将下载好的httpd-2.4.58-win64-VS17.zip拷贝到G:\WAMP目录下并解压到当前目录&#xff0c;得到Apache24目录 …

如何使用支付宝的沙箱环境在本地配置模拟支付并发布至公网测试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问

文章目录 前言1.Mysql 服务安装2.创建数据库3.安装 cpolar3.2 创建 HTTP 隧道 4.远程连接5.固定 TCP 地址5.1 保留一个固定的公网 TCP 端口地址5.2 配置固定公网 TCP 端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了 Linux 命令行进行繁琐的配置,下面简单几步,通…

Ubuntu 常用命令之 gunzip 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 gunzip是一个在Ubuntu系统下用于解压缩文件的命令。它主要用于解压.gz格式的文件。这个命令是gzip命令的反向操作&#xff0c;gzip用于压缩文件&#xff0c;而gunzip则用于解压缩文件。 gunzip命令的参数有 -c 或 --stdout 或 -…

月薪过万的运维工程师需要具备什么技能?

月薪过万通常意味着在工作中具备一定的技术深度和广度&#xff0c;如果想进入运维领域&#xff0c;首先你要了解&#xff0c;运维工程师是干什么的&#xff0c;需要解决哪些问题。 可能要考虑技术架构&#xff0c;结合风险、成本、技术等因素&#xff0c;确保系统的稳定性和可扩…

2023年全球架构师峰会(ArchSummit北京站2023)-核心PPT资料下载

一、峰会简介 ArchSummit聚焦业界强大的技术成果&#xff0c;秉承“实践第一、案例为主”的原则&#xff0c;展示先进技术在行业中的典型实践&#xff0c;以及技术在企业转型、发展中的推动作用。旨在帮助技术管理者、CTO、架构师做好技术选型、技术团队组建与管理&#xff0c…

flink sql1.18.0连接SASL_PLAINTEXT认证的kafka3.3.1

阅读此文默认读者对docker、docker-compose有一定了解。 环境 docker-compose运行了一个jobmanager、一个taskmanager和一个sql-client。 如下&#xff1a; version: "2.2" services:jobmanager:image: flink:1.18.0-scala_2.12container_name: jobmanagerports:…

网络安全:专科及普通本科的温柔乡

当代普通大学生的现状是卷又卷不过、躺又躺不平&#xff0c;把大把的青春都荒废在了思考我应该做什么才能有前途的问题上面。当然&#xff0c;这里说的是那些普通学历且对自己的职业生涯甚至是人生没有规划的大学生&#xff0c;包括专科、普通一本二本&#xff0c;并非985、211…

【Git】在 IDEA 中合并多个 commit 为一个

文章目录 1 未提交到远程分支1.1 需求说明1.2 reset 操作1.3 再次 push 2 已经提交到远程分支2.1 需求说明2.2 rebase 操作2.3 强制 push 分两种情况&#xff1a; 一种是本地提交还没推到远程&#xff0c;这种好处理另一种是已经提交到远程分支&#xff0c;这个略麻烦 1 未提…

升级ChatGPT4的方法

1. 主要流程&#xff1a;先申请一个美区apple id&#xff0c;然后往这个apple id充钱&#xff0c;用这个apple id的钱订阅chatgpt 2. 细节&#xff1a; &#xff08;1&#xff09;申请美区apple id&#xff1a; 其实这一步很简单&#xff08;曾经以为比较复杂&#xff09;&…

Hadoop 集群环境搭建

目录 第一部分&#xff1a;系统安装... 3 1&#xff1a;图形化安装... 3 2&#xff1a;选择中文... 3 3&#xff1a;安装选项... 3 4&#xff1a;软件选项... 4 5&#xff1a;安装位置... 4 6&#xff1a;网络配置... 6 7&#xff1a;开始安装... 7 8&#xff1a;创建用户... 7…

AI伴侣利用亚马逊云科技机器学习与人工智能服务,加速AI类产品的开发过程

2020年《纽约时报》调查显示&#xff0c;全球有超过1000万人以AI恋人作为伴侣&#xff1b;后浪发布的《2022年轻人未来恋爱白皮书》报告中显示&#xff0c;有近4成年轻人接受与虚拟人恋爱。随着人工智能技术的突破&#xff0c;越来越多年轻群体在AI伴侣软件亲手打造自己的理想恋…

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP

近年来&#xff0c;网红直播带货“翻车”事件频发&#xff0c;给品牌商带来了信任危机和负面口碑的困扰&#xff0c;严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…

【Spring教程32】SSM框架整合实战:从零开始学习SSM整合之功能模块开发 单元测试示例代码 PostMan接口测试示例

目录 1 功能模块开发1.1 步骤1:创建数据库及表1.2 步骤2:编写模型类1.3 步骤3:编写Dao接口1.4 步骤4:编写Service接口和实现类1.5 步骤5:编写Contorller类 2.单元测试2.1 步骤1:新建测试类2.2 步骤2:注入Service类2.3 步骤3:编写测试方法 3 PostMan测试3.1 新增3.2 修改3.3 删除…

在Linux Docker中部署RStudio Server,实现高效远程访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 安装RStudio Server二. 本地访问三. Linux 安装cpolar四. 配置RStudio serv…

数字化时代的智能支持:亚马逊云科技轻量应用服务器技术领先

轻量应用服务器是一种简化运维、门槛低的弹性服务器&#xff0c;它的"轻"主要体现在几个方面&#xff1a;开箱即用、应用优质、上手简洁、投入划算、运维简便以及稳定可靠。相较于普通的云服务器&#xff0c;轻量应用服务器简化了云服务的操作难度、使用和管理流程&a…

深入理解 Rust 中的容器类型及其应用

Rust 作为一种系统编程语言&#xff0c;提供了丰富的容器类型来处理各种数据结构和算法。这些容器类型不仅支持基本的数据存储和访问&#xff0c;还提供了高效的内存管理和安全性保障。本文将详细介绍 Rust 中的几种主要容器类型&#xff0c;包括它们的用法、特点和适用场景&am…