POJ 3087 Shuffle'm Up (模拟+map)

题目链接:http://poj.org/problem?id=3087

题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。

现在输入s1和s2的初始状态 以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"。

解题思路:照着模拟就好了,只是判断是否永远不能达到状态s12需要用map,定义map<string,int>mp,记录出现过的s1和s2合并产生的字符串,如果某一次s1、s2合并后产生的字符串曾经出现过,那说明会一直循环下去,也就无法到达状态s12了。

代码:

 1 #include<cstdio>
 2 #include<queue>
 3 #include<map>
 4 #include<cstring>
 5 #include<string>
 6 using namespace std;
 7 
 8 
 9 int main(){
10     int T;
11     scanf("%d",&T);
12     int cas=0;
13     while(T--){
14         char s1[105],s2[105],s3[205],res[205];
15         int len;
16         scanf("%d",&len);
17         scanf("%s%s%s",s1+1,s2+1,res+1);
18         map<string,int>mp;
19         int ans=0;
20         while(1){
21             ans++;
22             for(int i=1;i<=2*len;i++){
23                 if(i%2)
24                     s3[i]=s2[(i+1)/2];
25                 else
26                     s3[i]=s1[i/2];
27             }
28             s3[2*len+1]='\0';
29             for(int i=1;i<=2*len;i++){
30                 if(i<=len)
31                     s1[i]=s3[i];
32                 else
33                     s2[i-len]=s3[i];
34             }
35             if(strcmp(res+1,s3+1)==0)
36                 break;
37             if(mp.find(s3)==mp.end())
38                 mp[s3]=1;
39             else{
40                 ans=-1;
41                 break;
42             }        
43         } 
44         printf("%d %d\n",++cas,ans);
45     }
46     return 0;
47 } 

 

转载于:https://www.cnblogs.com/fu3638/p/7518060.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb哪些情况适用内嵌,哪些情况适用引用

在 SQL 中&#xff0c;我们经常会提起&#xff1a;一对一&#xff0c;一对多&#xff0c;多对多&#xff0c;而在 MongoDB 这样的数据库中&#xff0c;我们可以分为新的类型&#xff1a;少和多&#xff0c;之后我们会根据少和多进行一些数据库设计的详细分析&#xff0c;先来简…

前端学习(2585):前端怎么在响应头和请求头里面拿数据?

axios.interceptors.response.use( response > { //axios拦截器if (response.status 200) { //响应成功后if(response.headers[Authorization]){ //获取响应头里面的数据&#xff0c;**Authorization根据你响应头里面的数据获取&#xff0c;并不是唯一值**downLoad(resp…

git常用命令,项目删除原有github连接并重新连接,回滚,下拉分支代码,切换分支

下拉分支代码 $ git clone https://gitea.https.xiaozhuschool.com/APKDevelopment/YouYuanSellingWineMachine.git -b dev 连接 -b 分支名称 切换分支 $ git checkout -b dev 查看全部分支 $ git branch -a git重要的三个命令stash, checkout, reset的一些总结 adb shell &l…

普通树与二叉树的相互转化及哈夫曼树的了解

普通树与二叉树的相互转化及哈夫曼树的了解 二叉树与普通树的转化 二叉树的种种特性使得它更便于处理&#xff0c;如果能将普通树转化成二叉树就好了。 普通树 -> 二叉树 回忆孩子兄弟表示法&#xff0c;有第一孩子域&#xff08;左孩子&#xff09;&#xff0c;还有左孩子的…

node 将汉字转化为拼音

使用npm包&#xff1a;pinyin&#xff0c;这还是一个两年前发布的神库吧。 1、安装 yarn add pinyin2、使用 const pinyin require("pinyin");console.log(pinyin("中心")); // [ [ zhōng ], [ xīn ] ] console.log(pinyin("中心", {he…

oracle 10 数据库覆盖

同事经常发来一个DMP文件&#xff0c;要求覆盖数据库&#xff0c;我一般用下面的方法完成&#xff1a; 首先删除该用户&#xff0c;再新建用户&#xff0c;导入数据到该用户。 1、drop user username cascade; 2、新建用户、付权 3、导入数据 imp 今天导数据时遇到一个…

android 百分数与进度显示

double percent entity.getFundraisingMoney() / entity.getInvestmentProjectAll(); //输出一下&#xff0c;确认你的小数无误 System.out.println("小数&#xff1a;" percent); //获取格式化对象 NumberFormat nt NumberFormat.getPercentInstance(); //设置百…

【基础】ORACLE中on commit preserve rows和 on commit delete rows的区别

首先on commit preserve rows 和 on commit delete rows 都是在oracle 创建临时表时用到的&#xff0c; delete rows用于事务相关,也就在事务结束后truncate data in the temporary table.preserve rows表示在会话结束后清除临时表的数据前者在事务提交后数据就已经清除了&…

跳出内层循环 使用 for of 代替 map

有些场景&#xff0c;比如表单验证的时候&#xff0c;只要有一个字段没有填写&#xff0c;就给出toast提示&#xff0c;这就需要一发现问题&#xff0c;就给出提示&#xff0c;并且跳出循环。 map想要直接跳出循环&#xff0c;需要使用抛出异常的写法&#xff0c;而for of则适…

oracle 10 expdp impdp 导入、导出

今天收到到一个数据库的包&#xff08;.dup&#xff09;&#xff0c;要求导入到现有的数据库中&#xff0c;平时我们收到的包&#xff08;.dmp&#xff09;尾缀不一样&#xff0c;按正常的方法无法导入&#xff0c; 报错&#xff1a;IMP&#xff0d;00010 &#xff1a;不是有效…

android Module之间数据传递

方法一&#xff1a;使用接口回调 &#xff08;1&#xff09;在子module创建回调接口&#xff08;参数可变&#xff09; public interface OnChangeLisener {void onChanged(Date date);}&#xff08;2&#xff09;在子module 实现类设置接口回调 //设置选择回调 public void …

node 根据图片img url 获取 base64

自己都觉得搞笑的是&#xff0c;之前写前端图片裁剪代码的时候&#xff0c;想解决的问题是如何将canvas裁剪的base64图片转化为file格式上传。而现在考虑的问题是&#xff0c;如何将网络中的图片转化为base64图片格式。 两种写法&#xff0c;思想一摸一样。一种是http库实现的&…

130242014037-汤毓聪-实验一

实验报告 课程 软件体系结构与设计 实验名称 软件设计的网络环境 第 页 专业 软件工程 班级 1班 学号 1302420140 姓名 实验日期&#xff1a; 2017 年 9 月 14 日 报告退发 (订正 、 重做) 一、实验目的 1.复习软件工程的重要概念&#xff0c;熟悉…

软件测试管理之困惑

软件测试管理 最近研究技术的时间少一些&#xff0c;一直在看关于软件测试管理之类的文档&#xff0c;然后整理公司的一些流程。 公司和大多数中国的软件公司一样&#xff0c;有许多的地方不规范&#xff0c;毕竟咱也不是外包&#xff0c;没有规范的流程与管理&#xff0c;呵…

android ViewPager 图片浏览和保存图片

在build.gradle在添加依赖 compile com.alibaba:fastjson:1.1.54.android compile org.ligboy.retrofit2:converter-fastjson-android:2.1.0compile com.bm.photoview:library:1.4.1 compile xiaofei.library:android-data-storage:1.3.0 在layout下创建activity_photo_browser…

mongodb mongoose 常用操作符号 整理

操作符描述$eq等于$or或关系$nor或关系取反$gt大于$gte大于等于$lt小于$lte小于等于$ne不等于$in在多个值范围内$nin不在多个值范围内$all匹配数组中多个值$regex正则&#xff0c;用于模糊查询$size匹配数组大小$maxDistance范围查询&#xff0c;距离&#xff08;基于LBS&#…