2015年8月16日 星期日

[UVA] 11988 - Broken Keyboard

題意:
一個字元一個字元輸入,
若輸入'[',就跑回起點,
若輸入']',就跑到終點,

例如
輸入123[4
就會輸出4123

輸入1[23]4
就會輸出2314

方法:
如果使用陣列儲存,
若很多'['或']'就會超時,
使用linked list一個串一個,
紀錄起點和終點~


/* 20150817
 * hanting
 * UVa 11988 - Broken Keyboard
 * C++
 */
#include <iostream>
using namespace std;
#define head 100001
#define last 100002
int Left[100003];
int Right[100003];

void Link(int L,int R)
{
    Left[R]=L;
    Right[L]=R;
}
int main()
{
    string str;
    while(getline(cin,str))
    {
        int cur=head;
        Link(head,last);
        Right[last]=-1;
        for(int i=0;i<str.size();i++)
        {
            if(str[i]=='[')
            {
                cur=head;
            }
            else if(str[i]==']')
            {
                cur=Left[last];
            }
            else
            {
                Link(i,Right[cur]);
                Link(cur,i);
                cur=Right[cur];
            }
        }
        int now=Right[head];
        while(now!=last)
        {
            cout<<str[now];
            now=Right[now];
        }

        cout<<endl;
    }
    return 0;
}

沒有留言:

張貼留言