zoukankan      html  css  js  c++  java
  • 洗牌Shuffle'm Up POJ3087 模拟

    题目链接:Shuffle'm Up

    题目大意

    模拟纸牌的洗牌过程,已知两个牌数相等的牌堆。求解经过多少次洗牌的过程,使牌的顺序与目标顺序相同。

    思路

    直接模拟,主要是字符串的操作。问题是,如何判断出不可能的情况。这个题好像除了找是否会出现无限循环以外找不到更好的判断方法了。

    如果是用字符数组来写的话,要注意末尾'\0'要有,并且strcmp返回0是说明字符数组相等。

    题解

     1 #include <iostream>
     2 #include <cstring>
     3 #include <map>
     4 using namespace std;
     5 
     6 string s1, s2;
     7 string t, tmp, _tmp;
     8 
     9 
    10 long long n, ans, length;
    11 
    12 int shuffle()
    13 {
    14     map<string, int> vis;
    15     long long flag = 0;
    16     while(1)
    17     {
    18         //cout << tmp << endl;
    19         tmp = "";
    20         flag++;
    21         for(int i = 0; i < length; i++)
    22         {
    23             tmp += s2[i];
    24             tmp += s1[i];
    25         }
    26         if(tmp == t)
    27         {
    28             return flag;
    29         }
    30         if(vis[tmp] == 1)
    31         {
    32             return -1;
    33         }
    34 
    35         vis[tmp] = 1;
    36         s1 = tmp.substr(0, length);
    37         s2 = tmp.substr(length, length*2);
    38     }
    39 }
    40 
    41 int main(int argc, char const *argv[])
    42 {
    43 #ifdef debug
    44     freopen("test.txt","r",stdin);
    45 #endif
    46     cin >> n;
    47     for(int ii = 1; ii <= n; ii++)
    48     {
    49         cin >> length;
    50         cin >> s1 >> s2 >> t;
    51 
    52         ans = shuffle();
    53 
    54         cout << ii << " " << ans << endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    Linux各目录的意义
    LinuxVIM编辑器用法
    Linux自动同步时间
    bash的基本特性
    shell-homeworkone
    shell
    笔记
    Python-1-Day
    Linux使用BIND提供域名解析服务
    Linuxautofs自动挂载服务
  • 原文地址:https://www.cnblogs.com/SaltyFishQF/p/10310323.html
Copyright © 2011-2022 走看看