kuangbin专题 专题一 简单搜索 Shuffle'm Up POJ - 3087

本文详细解析了Shuffle'mUpPOJ-3087问题,通过模拟洗牌过程,使用字符串和哈希表判断是否能通过有限次操作将两副扑克牌洗成目标状态,并提供了完整的C++代码实现。

Shuffle’m Up POJ - 3087

题目链接:https://vjudge.net/problem/POJ-3087

题意:(1)有两副颜色多样的扑克牌,(A~H)表示不同颜色,给你两副牌,S1,S2和一副你需要洗出的KEY,S12由S2最底部,S1底部。。。一直下去,直到洗成S12,就是图片展示的那样。
(2)洗好的S12可以重新变成新的S1,S2,S1是从下取S12牌数的一半,S2的从上取S12牌数的一半,
问:这样操作有限次,能不能洗出S3,可以的话,求出最少洗牌次数,不能的话输出-1.

思路:算一个水题吧,简单的模拟,就是按照洗牌,拆牌那样模拟就好了,为了确定这个KEY能不能洗出,需要一个map<string,bool>,标记每次洗出的牌S12的字符串,如果洗出了之前洗出过的牌S12,说明KEY无法被洗出。

#include <iostream>
#include <cstring>
#include<string>
#include <cmath>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;

#define inf (1LL << 31) - 1
#define rep(i,j,k) for(int i = (j); i <= (k); i++)
#define rep__(i,j,k) for(int i = (j); i < (k); i++)
#define per(i,j,k) for(int i = (j); i >= (k); i--)
#define per__(i,j,k) for(int i = (j); i > (k); i--)

int ans;
string a, b, key;
int len;

//洗牌函数
inline void Insert(string& tmp, string& a, string& b){

	int l = 0;
	rep__(i, 0, len){
		tmp[l++] = b[i];
		tmp[l++] = a[i];
	}
}

bool bfs(){

	map<string, bool> mp;
	string tmp(2*len,'0');
	ans = 0;//初始化洗牌次数

	Insert(tmp, a, b);

	while (!mp[tmp]){ //该S12没出现过
		mp[tmp] = true; //标记新S12
		++ans;
		if (tmp == key) return true; //洗出了KEY
		
		//把S12拆成S1和S2
		rep__(i, 0, len) a[i] = tmp[i];
		rep__(i, len, 2 * len) b[i - len] = tmp[i];
		
		//重新洗牌
		Insert(tmp, a, b);
	}
	
	//洗不出KEY
	return false;
}

int main(){

	ios::sync_with_stdio(false);
	cin.tie(0);

	int n;
	cin >> n;


	rep(i, 1, n){
		cin >> len >> a >> b >> key;
		
		cout << i << " ";
		if (bfs()) cout << ans << endl;
		else cout << "-1" << endl;
	}
	
	return 0;
}
根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值