uva 11988Broken Keyboard (a.k.a. Beiju Text)

来源:互联网 发布:nike高仿淘宝 编辑:程序博客网 时间:2024/05/20 10:11

传送门

法一:
用双端队列做。

#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<map>#include<stack>#include<climits>#include<cctype>#include<bitset>#include<set>using namespace std;#define mod 1000000007#define PI acos(-1.0)#define INF 0x3f3f3f3ftypedef long long LL;char s[100010];int main(){    while(~scanf("%s",s)){        deque<int>q;        int i=0;        while(s[i]=='['||s[i]==']')i++;        q.push_back(i);        while(s[i]){            if(s[i]=='['){                q.push_front(i+1);                s[i]='\0';            }            else if(s[i]==']'){                q.push_back(i+1);                s[i]='\0';            }            i++;        }        while(!q.empty()){            printf("%s",s+q.front());            q.pop_front();        }        cout<<endl;    }    return 0;}

法二:
数组保存链表做:

#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<map>#include<stack>#include<climits>#include<cctype>#include<bitset>#include<set>using namespace std;#define mod 1000000007#define PI acos(-1.0)#define INF 0x3f3f3f3ftypedef long long LL;char str[100010];int nxt[100010];int main(){    int i,j,cur,last;    while(~scanf("%s",str+1))    {        int len = strlen(str+1);        cur = last = 0;        nxt[0] = 0;        for(i = 1; i<=len; i++)        {            if(str[i]=='[') cur = 0;            else if(str[i]==']') cur = last;            else            {                nxt[i] = nxt[cur];                nxt[cur] = i;                if(last == cur) last = i;                cur = i;            }        }        for(i = nxt[0]; i; i = nxt[i])            printf("%c",str[i]);       cout<<endl;    }    return 0;}
0 0
原创粉丝点击