POJ 3087 Shuffle'm Up 线性同余,暴力 难度:2
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相关推荐
- 【POJ3126 Prime Path】【POJ 3087 Shuffle'm Up】【UVA 11624 Fire!】【POJ 3984 迷宫问题】
POJ3126Prime Path 给定两个四位素数a b,要求把a变换到b 变换的过程要 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位 ...
- POJ 3087 Shuffle'm Up DFS
link:http://poj.org/problem?id=3087 题意:给你两串字串(必定偶数长),按照扑克牌那样的洗法(每次从S2堆底中拿第一张,再从S1堆底拿一张放在上面),洗好后的一堆可以 ...
- POJ 3087 Shuffle'm Up (模拟+map)
题目链接:http://poj.org/problem?id=3087 题目大意:已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块 ...
- POJ 3087 Shuffle'm Up(水题)
题目链接 蒙姐跟我说了题意,就很简单了,类似打扑克中的插牌.磕磕绊绊,终于把POJ第三次训练刷完了. 1 #include <cstdio> 2 #include <cstring& ...
- poj 3087 Shuffle'm Up 模拟(map记录)
题意:已知两堆牌数均为n的纸牌堆a和b的初始状态, 按给定规则能将他们相互交叉组合成一堆牌str,再将str的最底下的n张牌归为a,最顶的n张牌归为b,依此循环下去.现在输入a和b的初始状态 以及 预 ...
- G - Shuffle‘m Up POJ - 3087
G - Shuffle'm Up POJ - 3087 题意:洗牌,每次让两副牌依次合为一摞,每次s2的最后一张垫底,拆为两摞,下面一半为 s1,反复操作至出现目标情况,输出洗牌次数,如果出现重复,输 ...
- C++随机数之线性同余发生器
1. 随机数 随机数,也即"随机选择的数",是在一个有限数集上的一个一致分布的随机序列.随机数在许多方面有应用,如仿真.抽样.数值分析.计算机程序.娱乐等方面都有所应用.计算机用确 ...
- [XSY] 智慧树(线性同余方程组,线段树/树状数组)
智慧树 解决此题有两个要点: 如何判断一个线性同余方程组有没有解 如何统计合法子序列数目 先看第2点: 若一个序列是合法的,则这个序列的所有子序列都是合法的 考虑对∀1≤i≤n\forall 1\le ...
- R语言:作业六(逆变换法生成随机变量;线性同余发生器LCG的编写)
1. 用逆变换法编写产生下述随机变量的程序: X 0 1 p 0.4 0.6 模拟10000次,并确定随机变量的值0的比例. f <- function(n){{x <- rep(0,n) ...
最新文章
- 在?三缺一,来斗个地主——肝个斗地主案例(java)
- Java 11 已发布,String 还能这样玩!
- ajax 小木虫,NIST数据库中Acc. 是什么 小木虫
- jettytomcat对待表单过长问题
- C#常用单元测试框架比较:XUnit、NUnit和Visual Studio(MSTest)
- 用RPC OVER HTTPS发布Exchange(续)
- 命令02-pandas命令
- bzoj 3749: [POI2015]Łasuchy
- c语言中难度程序,c语言自学难度高么
- TwinCAT3 EL6070-1648授权模块使用
- CSS设置div水平垂直居中
- sql转置两种实现方式记录
- 华为鸿蒙参与者,一起来搞机 篇二十四:不止有鸿蒙,参加华为开发者大会是一种怎样的体验...
- 美允许4G技术与WiFi共享5G频段;全球移动用户将达50亿│IoT黑板报
- Java并发编程实战(学习笔记十 第十一章 性能与可伸缩性)
- zcu102出现运行可执行程序时出现的错误
- 第一章笔记MySQL数据库的安装目录详解
- 获取本月,上月,下月 第一天和最后一天 java
- Java去除PDF文件中的图片
- 《Mahout实战》
热门文章
- 循序渐进linux——基础知识、服务器搭建、系统管理、性能调优、集群应用_第四讲,Proxmox部署与应用...
- vim 格式化json
- 【若依(ruoyi)】弹框图标 / layer 图标
- 如何解决编程的误差问题_柏威机械丨高精密零件加工是如何解决误差精度问题的?...
- linux '$^t' 时间,Linux C时间函数 time_t struct tm
- 女生做产品经理好吗_请做产品经理,别做功能经理
- DGL教程【五】使用自己的数据集
- Elasticsearch: too many open files
- azkaban安装编译3.86 教程
- java高并发(六)线程安全性