【CCF CSP记录】202305-1 重复局面

题目

 

过程

C++中的map用法

map是C++中STL中的一个关联容器,以键值对来存储数据,数据类型自己定义。

同时map是一对一的,具体就是键值是唯一的,跟哈希表的概念差不多。

map<key,value>使用方法:
map.count(“amy”) //查看map中键值为amy的键值对有几个,只能为1或0,因为map键值唯一
status_map[pieces] ++; //map[key]==value ,所以相当于int类型的value++

参考:http://t.csdnimg.cn/jNas5

unordered_map和map的区别
  • map: map内部实现了一个红黑树(红黑树是非严格平衡二叉搜索树,而AVL是严格平衡二叉搜索树),红黑树具有自动排序的功能,因此map内部的所有元素都是有序的,红黑树的每一个节点都代表着map的一个元素。因此,对于map进行的查找,删除,添加等一系列的操作都相当于是对红黑树进行的操作。map中的元素是按照二叉搜索树(又名二叉查找树、二叉排序树,特点就是左子树上所有节点的键值都小于根节点的键值,右子树所有节点的键值都大于根节点的键值)存储的,使用中序遍历可将键值按照从小到大遍历出来。
  • unordered_map: unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的
思路

利用map键值唯一的性质,将棋盘局面(包含64各字符的字符串string)设置为键值,将该局面是第几次出现设置为数据值,即map<string, int> status_map;每次输入新的棋盘局面,就通过键值一步对比出是否重复,若重复,数据值+1;否则,数据值=1。2层循环。

参考:http://t.csdnimg.cn/ot65t

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

结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值