POJ -- 3087 Shuffle'm Up

題目網址: POJ -- 3087ios

這道題目是個模擬題,題目比較長,特別是哪是牌底哪是牌頂,分割的時候誰作S1誰作S2要分清楚。數組

惟一用到的就是判重,我是用STL裏面的set去判重,只用到insert()和count()兩個成員函數就ok。函數

其實不太懂這道題目的數據規模,牌堆高度給的最高是100,相互洗牌產生的牌堆按說應該特別多種纔對,由於我見題目上沒有給牌的顏色加限制,若是每張牌顏色都不一樣,恐怕組合數會特別多。可是這道題目應該沒有給那麼變態的數據,直接模擬就給過了。spa

#include <cstdio>
#include <cstring>
#include <set>
#include <string>
#include <iostream>
using namespace std;
const int maxn = 110*2;
int main()
{
    int N;
    cin >> N;
    int kase = 0;
    char buf[maxn];
    while(N--)
    {
        cout << ++kase << " ";
        string S1, S2, R, A;
        int C, ans = 0;
        cin >> C >> S1 >> S2 >> R;
        set<string> Set;
        for(;;)
        {
            for(int i = 0; i < 2*C; i++)
            {
                if(i % 2) buf[i] = S1[i/2];
                else buf[i] = S2[i/2];
            }
            buf[2*C] = '\0';
            A = (string)buf;
            ans++;

            if(A == R)
            {
                cout << ans << endl;
                break;
            }
            if(Set.count(A)) { cout << -1 << endl; break; }
            Set.insert(A);
            S1.clear();
            for(int i = 0; i < C; i++) S1.push_back(A[i]);
            S2.clear();
            for(int i = C; i < 2*C; i++) S2.push_back(A[i]);
        }
    }
    return 0;
}

還有一個字符數組強轉string類的用法,處理字符串的時候挺好用的。畢竟要用到set判重,構建set<string>是確定的。code

相關文章
相關標籤/搜索