poj-3087-Shuffle'm Up-模拟
2013-01-24 20:14
429 查看
题意:
给你两堆纸牌,让你通过数次洗牌动作使得洗牌之后的序列为给定序列。输出最小的洗牌次数。
洗牌方法:
把第二堆的第一张放在最下面,让后放第一堆最下面的那张,;轮流放。
洗完之后,把下面的n张作为第一堆,上面的n张作为第二堆。
做法:
模拟纸牌的放法,一步步的放,当序列符合的时候就终止放。
当纸牌的顺序和一开始的顺序相同的时候就输出-1。
注意:
注意寻找循环结。
给你两堆纸牌,让你通过数次洗牌动作使得洗牌之后的序列为给定序列。输出最小的洗牌次数。
洗牌方法:
把第二堆的第一张放在最下面,让后放第一堆最下面的那张,;轮流放。
洗完之后,把下面的n张作为第一堆,上面的n张作为第二堆。
做法:
模拟纸牌的放法,一步步的放,当序列符合的时候就终止放。
当纸牌的顺序和一开始的顺序相同的时候就输出-1。
注意:
注意寻找循环结。
#include<iostream> #include<stdio.h> #include<string.h> using namespace std; int num[501]; int nums[501]; int num1[101]; int num2[101]; int numx[501]; int n; int i; int cmp(int *shu) { for(i=0;i<2*n;i++) { if(nums[i]!=shu[i])return 0; } return 1; } void dos() { int step=0; while(1) { step++; for(i=0;i<n;i++) { nums[i*2]=num2[i]; nums[i*2+1]=num1[i]; } if(cmp(num)) { printf("%d\n",step); return ; } if(cmp(numx)) { printf("-1\n"); return ; } for(i=0;i<n;i++) { num1[i]=nums[i]; } for(i=n;i<n*2;i++) { num2[i-n]=nums[i]; } } } int main() { int t,j; char str; cin>>t; for(j=1;j<=t;j++) { scanf("%d%*c",&n); for(i=0;i<n;i++) { scanf("%c",&str); num1[i]=str-'A'; numx[i]=num1[i]; } getchar(); for(i=0;i<n;i++) { scanf("%c",&str); num2[i]=str-'A'; numx[i+n]=num2[i]; } getchar(); for(i=0;i<n*2;i++) { scanf("%c",&str); num[i]=str-'A'; } printf("%d ",j); dos(); } return 0; }
相关文章推荐
- POJ3087 Shuffle'm Up 简单模拟
- POJ 3087 Shuffle'm Up(模拟)
- poj-3087-Shuffle'm Up-模拟
- 模拟-POJ-3087-Shuffle'm up
- POJ 3087 Shuffle'm Up (模拟)
- G - Shuffle'm Up POJ 3087 模拟洗牌的过程,算作暴力搜索也不为过
- POJ 3087 Shuffle'm Up - 模拟
- POJ 3087 Shuffle'm Up (模拟)
- poj 3087 Shuffle'm Up (模拟搜索)
- Shuffle'm Up (poj 3087 模拟)
- POJ 3087 Shuffle'm Up模拟
- POJ 3087 Shuffle'm Up(简单模拟)
- poj 3087 Shuffle'm Up (模拟)
- POJ 3087 Shuffle'm Up(模拟)
- POJ 3087 Shuffle'm Up
- POJ 3087 Shuffle'm Up (DFS)
- POJ 3087 *** Shuffle'm Up
- POJ 3087-Shuffle'm Up(map+模拟)
- [kuangbin带你飞]专题一 简单搜索 G - Shuffle'm Up poj 3087
- POJ 3087 Shuffle'm Up(洗牌)