POJ 3087 Shuffle'm Up(模拟题)
2013-12-25 20:34
393 查看
Shuffle'm Up
大意:
已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。现在输入s1和s2的初始状态
以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"
思路:就是个字符串模拟题。
大意:
已知两堆牌s1和s2的初始状态, 其牌数均为c,按给定规则能将他们相互交叉组合成一堆牌s12,再将s12的最底下的c块牌归为s1,最顶的c块牌归为s2,依此循环下去。现在输入s1和s2的初始状态
以及 预想的最终状态s12。问s1 s2经过多少次洗牌之后,最终能达到状态s12,若永远不可能相同,则输出"-1"
思路:就是个字符串模拟题。
#include <stdio.h> #include <string.h> void Solve() { int n, m; char s1[110], s2[110], s3[210], s4[210], s[210]; scanf("%d", &n); for(int p = 1; p <= n; p++) { memset(s, 'a', sizeof(s)); scanf("%d%*c", &m); scanf("%s%s%s", s1, s2, s3); printf("%d ", p); strcpy(s, s1); strcat(s, s2); strcpy(s4, s); int t; for(t = 0; strcmp(s, s3); t++) { for(int j = 0; j < m; j++) { s1[j] = s[j]; s2[j] = s[j+m]; } int i, j; for(i = 0, j = 0; i < m; i++, j+=2) { s[j] = s2[i]; s[j+1] = s1[i]; } if(strcmp(s4, s) == 0) { t = -1; break; } } printf("%d\n", t); } } int main(void) { //freopen("data.in", "r", stdin); Solve(); return 0; }
相关文章推荐
- 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(模拟)
- G - Shuffle'm Up POJ 3087 模拟洗牌的过程,算作暴力搜索也不为过
- POJ 3087 Shuffle'm Up(DFS 循环)
- POJ3087 Shuffle'm Up 简单模拟
- poj-3087-Shuffle'm Up-模拟
- POJ 3087 Shuffle'm Up(模拟)
- Shuffle'm Up(POJ--3087
- poj 3087 Shuffle'm Up(bfs)
- 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 (模拟)