一個字元一個字元輸入,
若輸入'[',就跑回起點,
若輸入']',就跑到終點,
例如
輸入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;
}
沒有留言:
張貼留言