http://poj.org/problem?id=3087

设:s1={A1,A2,A3,...Ac}

s2={Ac+1,Ac+2,Ac+3,....A2c}

合在一起成为

Ac+1,A1,Ac+2,A2......A2c,Ac

经过一次转换之后变成

s1={Ac+1,A1,Ac+2.....}

s2={...A2c,Ac}

对应之前,每个数的序号发生的变化是

+1,+2,+3....-c,-c+1,.....

把整个数链想成环,也相当于是:

+1,+2,+3....+c,+c+1,.......

例如A1,由A1->A2->A4->A7....c次之后必然回到A1

所以整个串经过一定次数的变换一定会回到最初状态,只需判断在回到最初状态之前有没有得到目标状态即可

#include <cstdio>//a=(a+c+1)%(2*c)
#include <cstring>
using namespace std;
const int maxn=1002;
int c;
char s1[maxn],s2[maxn],aim[maxn],org[maxn],tmp[maxn];
void shuffle(){for(int i=0;i<c;i++){tmp[2*i]=s2[i];tmp[2*i+1]=s1[i];}tmp[2*c]=0;
}
int main(){int T;scanf("%d",&T);for(int ti=1;ti<=T;ti++){scanf("%d%s%s%s",&c,s1,s2,aim);shuffle();strcpy(org,tmp);int ans=1;if(strcmp(tmp,aim)==0){printf("%d 1\n",ti);continue;}bool fl=false;while(strcmp(org,tmp)!=0||ans==1){strncpy(s1,tmp,c);strncpy(s2,tmp+c,c);shuffle();ans++;if(strcmp(tmp,aim)==0){fl=true;printf("%d %d\n",ti,ans);break;}}if(!fl)printf("%d -1\n",ti);}return 0;
}

  

转载于:https://www.cnblogs.com/xuesu/p/4338159.html

POJ 3087 Shuffle'm Up 线性同余,暴力 难度:2相关推荐

  1. 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】

    POJ3126Prime Path 给定两个四位素数a  b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数  与  前一步得到的素数  只能有一个位 ...

  2. POJ 3087 Shuffle'm Up DFS

    link:http://poj.org/problem?id=3087 题意:给你两串字串(必定偶数长),按照扑克牌那样的洗法(每次从S2堆底中拿第一张,再从S1堆底拿一张放在上面),洗好后的一堆可以 ...

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

    题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块 ...

  4. POJ 3087 Shuffle'm Up(水题)

    题目链接 蒙姐跟我说了题意,就很简单了,类似打扑克中的插牌.磕磕绊绊,终于把POJ第三次训练刷完了. 1 #include <cstdio> 2 #include <cstring& ...

  5. poj 3087 Shuffle'm Up 模拟(map记录)

    题意:已知两堆牌数均为n的纸牌堆a和b的初始状态, 按给定规则能将他们相互交叉组合成一堆牌str,再将str的最底下的n张牌归为a,最顶的n张牌归为b,依此循环下去.现在输入a和b的初始状态 以及 预 ...

  6. G - Shuffle‘m Up POJ - 3087

    G - Shuffle'm Up POJ - 3087 题意:洗牌,每次让两副牌依次合为一摞,每次s2的最后一张垫底,拆为两摞,下面一半为 s1,反复操作至出现目标情况,输出洗牌次数,如果出现重复,输 ...

  7. C++随机数之线性同余发生器

    1. 随机数 随机数,也即"随机选择的数",是在一个有限数集上的一个一致分布的随机序列.随机数在许多方面有应用,如仿真.抽样.数值分析.计算机程序.娱乐等方面都有所应用.计算机用确 ...

  8. [XSY] 智慧树(线性同余方程组,线段树/树状数组)

    智慧树 解决此题有两个要点: 如何判断一个线性同余方程组有没有解 如何统计合法子序列数目 先看第2点: 若一个序列是合法的,则这个序列的所有子序列都是合法的 考虑对∀1≤i≤n\forall 1\le ...

  9. R语言:作业六(逆变换法生成随机变量;线性同余发生器LCG的编写)

    1. 用逆变换法编写产生下述随机变量的程序: X 0 1 p 0.4 0.6 模拟10000次,并确定随机变量的值0的比例. f <- function(n){{x <- rep(0,n) ...

最新文章

  1. 在?三缺一,来斗个地主——肝个斗地主案例(java)
  2. Java 11 已发布,String 还能这样玩!
  3. ajax 小木虫,NIST数据库中Acc. 是什么 小木虫
  4. jettytomcat对待表单过长问题
  5. C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)
  6. 用RPC OVER HTTPS发布Exchange(续)
  7. 命令02-pandas命令
  8. bzoj 3749: [POI2015]Łasuchy
  9. c语言中难度程序,c语言自学难度高么
  10. TwinCAT3 EL6070-1648授权模块使用
  11. CSS设置div水平垂直居中
  12. sql转置两种实现方式记录
  13. 华为鸿蒙参与者,一起来搞机 篇二十四:不止有鸿蒙,参加华为开发者大会是一种怎样的体验...
  14. 美允许4G技术与WiFi共享5G频段;全球移动用户将达50亿│IoT黑板报
  15. Java并发编程实战(学习笔记十 第十一章 性能与可伸缩性)
  16. zcu102出现运行可执行程序时出现的错误
  17. 第一章笔记MySQL数据库的安装目录详解
  18. 获取本月,上月,下月 第一天和最后一天 java
  19. Java去除PDF文件中的图片
  20. 《Mahout实战》

热门文章

  1. 循序渐进linux——基础知识、服务器搭建、系统管理、性能调优、集群应用_第四讲,Proxmox部署与应用...
  2. vim 格式化json
  3. 【若依(ruoyi)】弹框图标 / layer 图标
  4. 如何解决编程的误差问题_柏威机械丨高精密零件加工是如何解决误差精度问题的?...
  5. linux '$^t' 时间,Linux C时间函数 time_t struct tm
  6. 女生做产品经理好吗_请做产品经理,别做功能经理
  7. DGL教程【五】使用自己的数据集
  8. Elasticsearch: too many open files
  9. azkaban安装编译3.86 教程
  10. java高并发(六)线程安全性