【CCF】第30次csp认证——202305-1重复局面

2023-09-16 22:49:41

202305-1重复局面:

问题描述

国际象棋每一个局面可以用大小为 8×8 的字符数组来表示,其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 kqrbnp 表示,其中大写字母对应白方、小写字母对应黑方。棋盘上无棋子处用字符 * 表示。两个字符数组的每一位均相同则说明对应同一局面。

现已按上述方式整理好了每步棋后的局面,试统计每个局面分别是第几次出现。

输入格式

从标准输入读入数据。

输入的第一行包含一个正整数n,表示这盘棋总共有 n步。

接下来 8×n 行,依次输入第 1 到第 n 步棋后的局面。具体来说每行包含一个长度为 8 的字符串,每 8 行字符串共 64 个字符对应一个局面。

输出格式

输出到标准输出中。

输出共 n 行,每行一个整数,表示该局面是第几次出现。

样例输入

8
********
******pk
*****r*p
p*pQ****
********
**b*B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
******k*
******p*
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
******k*
******p*
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*pQ****
*b******
****B*PP
****qP**
**R***K*
********
******pk
*****r*p
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*
********
******pk
******rp
p*p*****
*b**Q***
****B*PP
****qP**
**R***K*

样例输出

1
1
1
1
1
2
2
1

样例说明

第 6、7 步后的局面分别与第 2、3 步后的局面相同。第 8 步后的局面与上图相对应。

子任务

输入数据满足 n ≤100。

提示

判断重复局面仅涉及字符串比较,无需考虑国际象棋实际行棋规则。

题解:

#include <bits/stdc++.h>
using namespace std;
int n;
char pieces[64];
map<string, int> status_map;
int main()
{
	cin >> n;
	for (int i=0;i<n;i++)  
	{
		for (int j=0;j<64;j++)  cin >> pieces[j];
		if (status_map.count(pieces))  
		{
			status_map[pieces] ++;
		}
		else 
		{
			status_map[pieces] = 1;
		}
		cout << status_map[pieces] << endl;
	}
	return 0;
}

解析:

map<string, int> status_map; // 声明一个映射(map)容器status_map,用于存储棋子状态和对应的出现次数

if (status_map.count(pieces)) // 判断以pieces为键是否已经存在于status_map中
    {
        status_map[pieces] ++; // 如果存在,则将对应的值加1
    }
    else
    {
        status_map[pieces] = 1; // 如果不存在,则将键pieces插入到status_map中,并将对应的值设置为1
    }

题解中涉及到的知识点:C++常见容器一网打尽_c++容器

除去题目背景的意思,即记录输入的每一个字符串是第几次出现并在最后输出次数,可以用map容器记录每一个64位的字符串并判断是否已经存入map中来更新次数。

更多推荐

Universal Robot (UR3)与USB摄像头和电磁夹持器结合的ROS拾取和放置硬件实施详细教程:从连接到实践

第一部分:连接UniversalRobot(UR3)到PC1.将UniversalRobot(UR3)连接到PC(Ubuntu16.04)在实现机器人的自动化任务之前,首先需要确保机器人与计算机之间的连接是稳定的。在这一部分,我们将详细介绍如何将UniversalRobot(UR3)连接到运行Ubuntu16.04的P

Spring编程常见错误50例-Spring Bean依赖注入常见错误(下)

@Value没有注入预期的值问题对于@Value可以装配多种类型的数据:装配对象:@Value("#{student}")privateStudentstudent;@BeanpublicStudentstudent(){Studentstudent=createStudent(1,"xie");returnstude

关键节点与邻居搜索:K-Core算法对比K-Hop算法的效能较量

文章首发地址K-Core算法K-Core算法是一种网络分析算法,用于发现网络中的核心节点。核心节点是指在网络中具有重要影响力的节点,它们连接着大量其他节点,是网络中的重要信息传播和控制中心。K-Core算法通过逐步删除网络中度小于K的节点,直到网络中不存在度小于K的节点为止,然后得到的网络即为K-Core网络。K-Co

有效的括号(栈的高频面试题)

一、题目描述题目连接:有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。输出需求示例1:输入:s="()"输出:true示例2:输入:s="()[

I/O扩展器IC

一、前言由于单片机资源不足,第一次使用IO扩展器,顺便记录下来使用心得,网上查询资料很少,使用的人不多,基本都得照着手册去手搓,搞底层难啊.需要扩展的IO需求不是很复杂,也不是用来在驱动总线信号,就是扩展为IO,有输入和输出控制即可,之前总用移位寄存器74HC595去扩展IO输出控制,但是需要输入的时候,还是得用专用的

流媒体弱网优化之路(机器学习应用)——了解我们的网络模型

流媒体弱网优化之路(机器学习应用)——了解我们的网络模型——我正在的github给大家开发一个用于做实验的项目——github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实现一个json全配置,提供全面的可视化算法观察能力。欢迎大家使用——文

医疗革命的关键推手,看AIGC弥合医疗差距的未来之路

随着科技的飞速进步,医疗水平在过去几十年里取得了巨大的突破。这些科技创新不仅改变了我们对健康和医疗的认知,也深刻地塑造了社会的现状。其中,人工智能作为医疗领域的一项前沿技术,正以前所未有的方式影响着我们的生活。它不仅提高了医疗水平,还为社会带来了全新的挑战和机遇。但医疗差距始终一直存在,不同地区和人群之间医疗服务和资源

9.21(复习9.20,9.17,9.13)

1.转轮法对于点查询和范围查询比较复杂,散列划分适合点查询,范围划分适合点查询和范围划分2.XML数据库适合管理复杂数据结构的数据集,当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特性。9.201.混合水平是水平分片,垂直分片和导出分片的混合2.关联挖掘是用于发现数据库中数据间的关联习惯3.提取游标

QT配置MySQL数据库 && ninja: build stopped: subcommand failed

QT配置MySQL数据库我当前的软件版本:QTCreator10.0.2(community),MingW6.4.3(QT6),MySQL8.0。MySQL不配置支持的数据库有QList("QSQLITE","QODBC","QPSQL"),这个时候是不支持MYSQL数据库的,所以需要进行配置。通常老版本的QT配置是通

【从0学习Solidity】9. 常数 constant和immutable

【从0学习Solidity】9.常数constant和immutable博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全栈开发,期待与您一起在移动开发的世界中,不断进步和创造!本文收录于不写代码没

vue2的基础知识巩固

一、定义:是一个渐进式的JavaScript框架二、特点:减少了大量的DOM操作编写,可以更专注于逻辑操作分离数据和界面的呈现,降低了代码耦合度(前端端分离)支持组件化开发,更利于中大型项目的代码组织vue2核心功能:响应式数据与差值表达式:先实例化vue,在内部设置el(选择器,这个vm实例对谁生效),data声明响

热文推荐