CSP-CCF ★201512-2 消除类游戏★

news/2024/9/18 13:07:27/ 标签: 算法, 数据结构, c++, 游戏

一、问题描述

问题描述

  消除类游戏是深受大众欢迎的一种游戏游戏在一个包含有nm列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个nm列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。

输入格式

  输入的第一行包含两个整数nm,用空格分隔,分别表示棋盘的行数和列数。
  接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。

输出格式

  输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。

样例输入

4 5
2 2 3 1 2
3 4 5 1 4
2 3 2 1 3
2 2 2 4 4

样例输出

2 2 3 0 2
3 4 5 0 4
2 3 2 0 3
0 0 0 4 4

样例说明

  棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。

样例输入

4 5
2 2 3 1 2
3 1 1 1 1
2 3 2 1 3
2 2 3 3 3

样例输出

2 2 3 0 2
3 0 0 0 0
2 3 2 0 3
2 2 0 0 0

样例说明

  棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。

评测用例规模与约定

  所有的评测用例满足:1 ≤ nm ≤ 30。

二、解答

思路:

对每一行、每一列进行检测,将检测到的位置存放在set容器中(因为它会自动去重),然后统一将它们置为0,最后输出。

代码:

#include<iostream>
#include<set>
using namespace std;
struct Color {int x;int y;//定义结构体的优先级排序,先按x从大到小,x相等,按y从大到小//两种写法//写法1:/*bool operator<(const Color& other) const {if (x == other.x) {return y < other.y;}return x < other.x;}*///写法2:friend bool operator<(const Color& c1, const Color& c2) {if (c1.x == c2.x) return c1.y < c2.y;return c1.x < c2.x;}
};
int main()
{int n, m;cin >> n >> m;//行、列int a[31][31] = { 0 };//使用二维数组存储数据set<Color>color;//定义set容器,集合,内部自动有序且不含重复元素//输入for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cin >> a[i][j];}}//检测每一行是否有相邻的重复元素for (int i = 1; i <= n; i++)//行{//for(int j=1;j<=m;j++)int j = 1;while(j<=m)//本来用的是for循环,也可以的{int num = 1;//!!!!!应该是1而不是0!!!并且应该放在里面,每次都要重新初始化while(a[i][j] == a[i][j + 1]){j++;num++;}if (num >= 3){for (int k = j; k > j - num; k--){color.insert({ i, k });//插入符合颜色消除的位置、记录下来}}j++;//否则出现死循环}}//同理,对每一列进行检测for (int j= 1; j <= m; j++)//列{//for (int i = 1; i <= n; i++)int i = 1;while(i<=n){int num = 1;//应该放在里面!!!while (a[i][j] == a[i+1][j]){i++;num++;}if (num >= 3){for (int k = i; k > i - num; k--){color.insert({ k,j });//这里必须加{},否则会报错}}i++;}}for (set<Color>::iterator it = color.begin(); it != color.end(); it++){a[(*it).x][(*it).y] = 0;//检测完毕,将所有满足条件的置为0}//进行输出for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){cout << a[i][j]<<" ";}cout << endl;}return 0;
}


http://www.ppmy.cn/news/1520812.html

相关文章

Spring的核心设计模式——工厂模式

目录 工厂模式 工厂模式的类型 优点 缺点 使用场景 结构 实现 步骤 1 步骤 2 步骤 3 步骤 4 步骤 5 工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;使得创建对象的…

Scratch教师节:给老师的一封信

小虎鲸Scratch资源站-免费Scratch作品源码,素材,教程分享平台! 【Scratch教师节特别献礼】—— 给老师的一封信&#xff1a;编程之光&#xff0c;照亮梦想之路 在这个金秋送爽、硕果累累的季节里&#xff0c;我们迎来了一个特别而温馨的日子——教师节。在这个充满感激与敬意的…

无人机纪录片航拍认知

写在前面 博文内容为纪录片航拍简单认知&#xff1a;纪录片 航拍镜头&#xff0c;航拍流程&#xff0c;航拍环境条件注意事项介绍航拍学习书籍推荐《无人机商业航拍教程》读书笔记整理&#xff0c;适合小白认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 99%的焦虑都来自于…

使用模板:封装栈、队列

栈 #include <iostream>using namespace std;//封装栈 template<typename T> class myStack { private:T *data;int top-1; //记录栈顶元素下标int size; //栈的大小 public:myStack():size(10){data new T[size];top-1;}myStack(int size){data…

Axure RP实战:打造高效文字点选验证码

Axure RP实战&#xff1a;打造高效文字点选验证码 前言 在数字时代&#xff0c;网络安全和用户体验是设计在线表单时的两大关键考量。 验证码作为一种验证用户身份的技术&#xff0c;已经从简单的数字和字母组合&#xff0c;发展到了更为复杂和用户友好的形式。 今天&#…

实用的4大网站建设模板资源网站

WP模板牛 (wpniu.com ) WP模板牛是一个综合性的WordPress建站模板分享网站&#xff0c;提供中文WP模板、外贸WP模板、免费WP模板等100多个WordPress模板。使用这些模板可以快速搭建起属于自己的WordPress网站。 模板之家 (mymoban.com ) 模板之家是一个提供各种网站模板资源…

设计者模式之访问者模式

1.访问者模式概述 允许你在不改变对象结构中的元素类的前提下&#xff0c;向对象结构中的元素增加新的行为。这种模式将数据结构与作用于结构上的操作分离&#xff0c;从而使得我们可以独立地改变数据结构和操作。 2.访问者模式的组成部分 1&#xff09;Visitor&#xff08;访…

【C++】STL—vector的使用

目录 前言vector的常见构造迭代器的使用vector空间增长问题vector的增删查改尾插和尾删findinsert和erase 前言 vector是表示可变大小数组的序列容器。它就像数组一样&#xff0c;采用连续的存储空间来存储元素&#xff0c;且它的大小可以动态改变。并且vector在访问元素时也非…

【护网相关知识】

文章目录 一、什么是防火墙1.WAF2.IDS入侵检测系统3.IPS入侵防御系统4.安全工具5.OSI参考模型6.常见的网络攻击方式7.OWSPTOP10常见漏洞及基本原理8.常见漏洞及其基本原理9.流量分析10.域名系统11.渗透测试报告编写及安全事件处置 一、什么是防火墙 二代防火墙 三代防火墙部署…

十五章 为xxl-job这个项目创建一个 helm

为xxl-job这个项目创建一个 helm 1. 创建 Helm Chart 在当前目录下创建一个名为 xxl-job-admin 的 Helm Chart&#xff1a; helm create xxl-job-admin这会生成一个包含 Chart.yaml、values.yaml、templates 等文件夹的目录。 2. 自定义 Helm Chart 将之前提供的 values.y…

橘子学ES实战操作之管道类型Ingest pipelines的基本使用

简介 我们在使用ES的时候&#xff0c;经常的用法就是把其他数据源比如Mysql的数据灌到ES中。 借用ES的一些功能来提供数据的全文检索以及聚合分析之类的功能。 在这个灌数据的过程中&#xff0c;我们经常会对数据做一些治理&#xff0c;类似ETL的能力。然后把治理后的数据写入…

查看 mysql 密码过期策略,设置永不过期

SELECT user, host, password_expired, password_lifetime FROM mysql.user WHERE user username;如果 password_expired 为 Y&#xff0c;则密码已过期。字段 password_lifetime 存储密码的寿命&#xff0c;以天为单位&#xff0c;这个可以用来作为是否到期的依据。 修改密码…

【APP自动化】Appium 环境搭建

1 基础环境 安装 node.js (1) 安装node.js 安装的是10版本&#xff0c;node-v10.16.0-x64&#xff0c;node.js安装比较简单&#xff0c;直接采用默认选项即可&#xff0c;路径的话&#xff0c;可以自己更改下。 (2) 添加Path环境变量 (3) 验证node.js是否安装成功 可以在CMD…

力扣122-买卖股票的最佳时机 II(java详细题解)

题目链接&#xff1a;122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优…

数据库课程设计mysql

1. 简介 1.1. 概述 MySQL是一个开源的关系型数据库管理系统(RDBMS),它使用了Structured Query Language(SQL)来操作和查询数据。MySQL由瑞典MySQL AB公司开发,后来被Sun微系统收购,最后由甲骨文公司接管。MySQL支持多种平台,如Windows、Linux、Unix等,并且在Web应用…

pikachu文件包含漏洞靶场

漏洞基础 程序在引用文件的时&#xff0c;引用的文件名存在用户可控的情况&#xff0c;传入的文件名没有经过合理的校验或校验不严&#xff0c;从而操作了预想之外的文件&#xff0c;就有可能导致文件泄漏和恶意的代码注入&#xff1b; 本地文件包含 指通过相对路径/绝对路…

自动驾驶---什么是Frenet坐标系?

1 背景 为什么提出Frenet坐标系&#xff1f;Frenet坐标系的提出主要是为了解决自动驾驶系统在路径规划的问题&#xff0c;它基于以下几个原因&#xff1a; 符合人类的驾驶习惯&#xff1a; 人类驾驶员在驾驶过程中&#xff0c;通常不会关心自己距离起点的横向和纵向距离&#x…

二叉树的中序遍历(递归非递归方法)

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 对于二叉树的中序遍历就是左中右&#xff0c;这么记住就行&#xff0c;前序后序就是把重放在前面和后面的区别&#xff0c;…

如何构建高并发抢购系统(PHP+Redis)

为了构建一个高并发抢购系统&#xff0c;并确保系统设计具有良好的可扩展性和维护性&#xff0c;可以结合设计模式进行详细设计。以下是结合设计模式的抢购系统详细设计&#xff1a; 1. 系统概述 抢购系统的目标是处理大量用户的并发抢购请求&#xff0c;确保每个用户能够公平…

开源模型应用落地-LlamaIndex学习之旅-LLMs-集成vLLM(二)

一、前言 在这个充满创新与挑战的时代,人工智能正以前所未有的速度改变着我们的学习和生活方式。LlamaIndex 作为一款先进的人工智能技术,它以其卓越的性能和创新的功能,为学习者带来前所未有的机遇。我们将带你逐步探索 LlamaIndex 的强大功能,从快速整合海量知识资源,到…