poj3087——Shuffle'm Up
2017-11-15 17:05
381 查看
题目大意:两叠扑克牌,每叠都可以有不同种颜色的扑克牌,问至少经过多少次洗牌能让最终的一叠扑克牌按照所给颜色排列
输入:case个数n(1<=n<=1000)
每叠扑克牌的张数c(1<=c<=100)
第一叠扑克牌的颜色排列(从底往上)
第二叠扑克牌的颜色排列
理想的最终扑克牌颜色排列
输出:最少洗牌次数/-1
分析:字符串模拟扑克牌颜色,这道题唯一的难点在于如何判断不能到达理想的顺序,方法就是如果洗牌后第一叠扑克牌又回到了原始的s1状态,此时还无解,则表明不能达到理想顺序
代码:转载自http://cavenkaka.iteye.com/blog/1225468
#include<iostream>
using namespace std;
int main()
{
int n, c;
char s1[105], s2[105], s12[210], des[210];
cin >> n;
for(int t = 1; t <= n; t ++)
{
cin >> c >> s1 >> s2 >> des;
int ans = 0;
bool flag = false;
char str1[105];
strcpy(str1, s1); // str1保存原始状态的s1。
while(!flag)
{
int i, k = 0;
for(i = 0; i < c; i ++)
{ // s1和s2按规则合成s12。
s12[k ++] = s2[i];
s12[k ++] = s1[i];
}
s12[k] = 0;
ans ++;
if(!strcmp(s12, des))
{ // 若s12与目标相同。
flag = true;
break;
}
for(i = 0, k = 0; k < c; k ++) // 新的s1。
s1[i ++] = s12[k];
s1[i] = 0;
for(i = 0, k = c; k < 2 * c; k ++) // 新的s2。
s2[i ++] = s12[k];
s2[i] = 0;
if(!strcmp(s1, str1)) // 等到s1经过x次变换后回到str1,则说明不可能到达目标情况了。
break;
}
if(flag) cout << t << ' ' << ans << endl;
else cout << t << " -1" << endl;
}
return 0;
}
输入:case个数n(1<=n<=1000)
每叠扑克牌的张数c(1<=c<=100)
第一叠扑克牌的颜色排列(从底往上)
第二叠扑克牌的颜色排列
理想的最终扑克牌颜色排列
输出:最少洗牌次数/-1
分析:字符串模拟扑克牌颜色,这道题唯一的难点在于如何判断不能到达理想的顺序,方法就是如果洗牌后第一叠扑克牌又回到了原始的s1状态,此时还无解,则表明不能达到理想顺序
代码:转载自http://cavenkaka.iteye.com/blog/1225468
#include<iostream>
using namespace std;
int main()
{
int n, c;
char s1[105], s2[105], s12[210], des[210];
cin >> n;
for(int t = 1; t <= n; t ++)
{
cin >> c >> s1 >> s2 >> des;
int ans = 0;
bool flag = false;
char str1[105];
strcpy(str1, s1); // str1保存原始状态的s1。
while(!flag)
{
int i, k = 0;
for(i = 0; i < c; i ++)
{ // s1和s2按规则合成s12。
s12[k ++] = s2[i];
s12[k ++] = s1[i];
}
s12[k] = 0;
ans ++;
if(!strcmp(s12, des))
{ // 若s12与目标相同。
flag = true;
break;
}
for(i = 0, k = 0; k < c; k ++) // 新的s1。
s1[i ++] = s12[k];
s1[i] = 0;
for(i = 0, k = c; k < 2 * c; k ++) // 新的s2。
s2[i ++] = s12[k];
s2[i] = 0;
if(!strcmp(s1, str1)) // 等到s1经过x次变换后回到str1,则说明不可能到达目标情况了。
break;
}
if(flag) cout << t << ' ' << ans << endl;
else cout << t << " -1" << endl;
}
return 0;
}
相关文章推荐
- POJ - 3087 Shuffle'm Up(模拟题)
- POJ 3087 Shuffle'm Up(BFS)
- poj 3087 Shuffle'm Up(简单的广搜)
- poj 3087 Shuffle'm Up
- [ACM] POJ 3087 Shuffle'm Up
- poj 3087 Shuffle'm Up(模拟)
- POJ 3087 Shuffle'm Up (简单模拟)
- poj3087 Shuffle'm Up
- 【BFS】POJ 3087 Shuffle'm Up
- POJ 3087 Shuffle'm Up
- POJ-3087___Shuffle'm Up——解题报告
- poj 3087 Shuffle'm Up 模拟
- N - Shuffle'm Up POJ - 3087——模拟
- POJ3087-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(神之模拟)