【CSP试题回顾】201512-2-消除类游戏

CSP-201512-2-消除类游戏

解题思路

  1. 输入棋盘大小和颜色: 首先,程序从标准输入读取两个整数nm,分别代表棋盘的行数和列数。然后,程序读取接下来的n行输入,每行包含m个整数,代表棋盘上每个方格中的棋子颜色。

  2. 初始化: 代码中使用了vector<vector<int>>来存储棋盘的状态。还定义了一个结构体MyPoint用于表示棋子的位置,以及一个pointList向量存储将要被消除的棋子的位置。

  3. 横向检查: 程序通过两层循环遍历棋盘的每一行。它比较当前棋子与上一个棋子的颜色。如果它们的颜色不同,程序会检查是否有连续三个或更多相同颜色的棋子(通过变量constantTimes来记录)。如果有,将这些棋子的位置添加到pointList中;如果没有连续三个颜色相同的棋子,则需要重置lastNumconstantTimeschildPointList如果颜色相同,则增加constantTimes的值,并将当前棋子的位置添加到childPointList中以便进一步处理。

  4. 纵向检查: 类似于横向检查,但这次是按列来遍历棋盘。对于每一列,程序检查连续的相同颜色的棋子,并在发现三个或更多连续相同颜色的棋子时,将它们的位置添加到pointList

  5. 消除棋子: 遍历pointList中存储的所有位置,并将这些位置上的棋子在棋盘上标记为0,代表这些棋子已经被消除。

完整代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct MyPoint
{
	int x, y;
};
vector<MyPoint>pointList;

int main() {
	int row, col;
	cin >> row >> col;

	vector<vector<int>>chessBoard(row, vector<int>(col));
	for (auto& it : chessBoard) {
		for (auto& jt : it) {
			cin >> jt;
		}
	}

	// 横向遍历
	for (int i = 0; i < row; i++)
	{
		int constantTimes = 1, lastNum = -1;
		vector<MyPoint>childPointList;

		for (int j = 0; j < col; j++)
		{
			if (chessBoard[i][j] != lastNum) // 与前一个数字不同或者是本行的最后一个元素
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{					
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}

				lastNum = chessBoard[i][j]; // 更新上一个数字到lastNum
				constantTimes = 1; // 重置连续次数
				childPointList.clear(); // 清空以前的子集

				MyPoint t{ i,j }; // 把当前点加入子集
				childPointList.push_back(t);

			}
			else // 和上一个数字相同
			{
				constantTimes++; // 连续次数+1
				MyPoint t{ i,j }; // 把当前点加入子集
				childPointList.push_back(t);
			}
		
			if (j == col - 1)
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}
			}
		}
	}

	// 纵向遍历
	for (int i = 0; i < col; i++)
	{
		int constantTimes = 1, lastNum = -1;
		vector<MyPoint>childPointList;

		for (int j = 0; j < row; j++)
		{
			if (chessBoard[j][i] != lastNum)
			{
				if (constantTimes >= 3) 
				{
					for (auto& it : childPointList) { 
						MyPoint t = it;
						pointList.push_back(t);
					}
				}

				lastNum = chessBoard[j][i]; 
				constantTimes = 1;
				childPointList.clear();

				MyPoint t{ j,i };
				childPointList.push_back(t);
			}
			else 
			{
				constantTimes++;
				MyPoint t{ j,i };
				childPointList.push_back(t);
			}

			if (j == row - 1)
			{
				// 判断能否消除
				if (constantTimes >= 3)
				{
					for (auto& it : childPointList) { // 将消除的点插入子集
						MyPoint t = it;
						pointList.push_back(t);
					}
				}
			}
		}
	}


	for (auto& it : pointList)
	{
		chessBoard[it.x][it.y] = 0;
	}

	for (auto& it : chessBoard) {
		for (auto& jt : it) {
			cout << jt << " ";
		}
		cout << endl;
	}
	return 0;
}

请添加图片描述

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

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

相关文章

电子台账:通过标签颜色快速区分某月账页是否为空、是否锁定

目录 1 数据为空的账页&#xff0c;标签顶部没有标记色条 2 包含有效数据的账页且未进行锁定&#xff0c;标签顶部为深绿色标记色条 3 包含有效数据的账页且被锁定&#xff0c;标签顶部为橙色标记色条 通过设置账页标签的颜色&#xff0c;快速区分哪些月份的账页数据为空&am…

【书生·浦语大模型实战营】第6节 OpenCompass 大模型评测 课后作业

OpenCompass 大模型评测 0. 课程链接1. 课后作业1.1 基础作业1.2 进阶作业 2. 结业总结 0. 课程链接 链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/opencompass/opencompass_tutorial.md 1. 课后作业 1.1 基础作业 使用 OpenCompass 评测 InternLM2-Cha…

python高级之元类

python高级之元类 一、Type创建类1、传统方式创建类2、非传统方式 二、元类三、总结 一、Type创建类 class A(object):def __init__(self, name):self.name namedef __new__(cls, *args, **kwargs):data object.__new__(cls)return data根据类创建对象 objA(‘kobe’) 1、执…

机器视觉相关网站推荐

机器视觉相关网站推荐 - 知乎计算机视觉&#xff08;Computer Vision&#xff09;最近这几年发展迅速&#xff0c;技术论坛和QQ群也如雨后春笋&#xff0c;特别是人脸检测/识别领域。近段时间云从君从研究院那里探得了好几个论坛&#xff0c;收藏了若干网站&#xff0c;记录下&…

领域驱动设计(Domain-Driven Design DDD)——战略设计2

二、保持模型的完整性 2、模式&#xff1a;Continuous Integration 定义一个Bounded Context后&#xff0c;必须让它保持合理。 当很多人在同一个Bounded Context中工作时&#xff0c;模型很容易发生分裂。团队越大&#xff0c;问题就越大&#xff0c;但即使是3、4个人的团队也…

状压dp详解,棋盘式、集合型,OJ详解

文章目录 零、引例-小国王1.问题描述2.暴力枚举3.多维dp4.维度压缩 一、状压dp1.认识状压dp2.棋盘式(基于连通性)2.1小国王2.1.1题目链接2.1.2思路分析2.1.3AC代码 2.2玉米田2.2.1题目链接2.2.2思路分析2.2.3AC代码 2.3炮兵阵地2.3.1题目链接2.3.2思路分析2.3.3AC代码 2.4蒙德里…

C++ 快速排序快速选择OJ

目录 1、75. 颜色分类 2、912. 排序数组 3、 215. 数组中的第K个最大元素 4、LCR 159. 库存管理 III 1、75. 颜色分类 思路&#xff1a;利用快速排序思路&#xff0c;使用三指针分块进行优化。 [0,left]——小于key[left1,right-1]——等于key[right,nums.size()]——大于k…

抖店怎么做起来?2024新版操作逻辑,做项目要做一米宽万米深

我是王路飞。 不知不觉间&#xff0c;我已经在抖音电商这条赛道深耕走过了四年。 这四年里&#xff0c;我们有了自己的黑标品牌旗舰&#xff0c;有了自己的仓库配套周边&#xff0c;有了自己的模式体系人员&#xff0c;有了数不清的类目和产品操作经验。 收获着身后团队伙伴…

107. sort( )方法-排序列表元素(上)

107. sort( )方法-排序列表元素&#xff08;上&#xff09; 【目录】 文章目录 107. sort( )方法-排序列表元素&#xff08;上&#xff09;1. 作用2. 语法3. 数值列表排序4. key str.lower 排序时不区分字母大小写5. 如何理解区分大小写6. key len 按照元素的长度进行排序7.…

Objective-C blocks 概要

1.block的使用 1.1什么是block&#xff1f; Blocks是C语言的扩充功能&#xff1a;带有自动变量&#xff08;局部变量&#xff09;的匿名函数。 “带有自动变量”在Blocks中表现为“截取自动变量" “匿名函数”就是“不带名称的函数” 块&#xff0c;封装了函数调用及调用…

Tailscale中继服务derper使用docker-compose部署

docker启动 docker run --restart always \--name derper -p 12345:12345 -p 3478:3478/udp \-v /root/.acme.sh/xxxx/:/app/certs \-e DERP_CERT_MODEmanual \-e DERP_ADDR12345 \-e DERP_DOMAINxxxx \-d ghcr.io/yangchuansheng/derper:latestdocker-compose启动 version: …

STM32(18)I2C

串口通信缺点 一个设备就需要一个串口&#xff0c;单片机可能没有那么多串口外设 总线/非总线 主机&#xff1a;负责管理总线&#xff0c;可控制波特率、数据的通信方向 波特率&#xff1a;由主机产生波特率信号 数据的传输 每个从机都有7位地址&#xff0c;最后移位是读&a…

Android开发教程入门,那些被大厂优化的程序员们

Binder原理 1、概述 Android系统中&#xff0c;涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信&#xff0c;这便需要依赖于Binder IPC。不仅于此&#xff0c;整个Android系统架构中&#xff0c;大量采用了Binder机制作…

计算机形式严峻,二本计算机研究生有没有必要读?

有一说一&#xff0c;不值得 现在的就业形式确实严峻&#xff0c;但是我觉得读一个二本的研究生并不能给你带来太大的价值&#xff0c;首先就是就业投简历的时候&#xff0c;面试官面对大量的简历&#xff0c;往往都是先按照学校筛选&#xff0c;985和211的放在一块&#xff0…

画图解题思路( ccf 201512-3)

分析 首先需要转换坐标系&#xff0c;可以将两个坐标系的点写出来&#xff0c;对比一下找规律 可以发现题目中的坐标(x, y)转变成数组坐标系为(n - y - 1, x); 然后再判断是画线还是填充 画线&#xff1a;先转换题目坐标&#xff0c;再遍历画线 填充&#xff1a;采用dfs

如何比较字形相同但编码不同的两个字

今天在做字符串比较时遇到个很新奇的问题&#xff0c;在此记录一下。 字符串比较最常用的方法就是equals方法&#xff0c;来看一下下面这个比较会返回什么结果呢&#xff1f; public static void main(String[] args) {{String s1 "⽹"; // 12153String s2 "…

HplusAdmin ASP.NET基本权限管理系统

HplusAdmin 介绍 一套ASP.NET WebForm(不用控件) hplusasp.netsqlserver 基本权限管理系统 http://hplus.baocaige.top 暂不开源&#xff0c;需要的滴滴或者留下邮箱&#xff01;&#xff01;&#xff01; 账号 普通账号 账号&#xff1a;user 密码&#xff1a;Aa123456普…

【笔记版】edgecore.yaml分析总结

1. 文件路径 /etc/kubeedge/config edgecore.yaml是该目录下唯一的文件 附上链接&#xff1a;edgecore.yaml 2. 文件生成方式 2.1 方式一 使用keadm安装部署的方式&#xff0c;执行完keadm join --cloudcore-ipportcloudcore监听的IP地址:端口&#xff08;默认为10002&…

1688商品详情数据采集,工程数据采集丨店铺数据采集丨商品详情数据采集

1688是中国的一个大型B2B电子商务平台&#xff0c;主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说&#xff0c;可以采用以下几种常见的方法&#xff1a; 官方API接口&#xff1a;如果1688提供了官方的API接口&#xff0c;那么可…

项目中spring security与jwt.腾讯面试分享

写这篇文章是为了记录我面试pcg时平时没有留意或者钻研的地方。 面试是根据项目问的问题&#xff1a; 为什么采用jwt存储token&#xff1f; 我的项目是微服务项目&#xff0c;里面部署了资源服务和认证服务&#xff0c;这里选择jwt作为token一方面是可以存储用户的信息&#…