UVa11988 Broken Keyboard (a.k.a. Beiju Text)

        题意:你在输入文本,插入点会不时跳到最前面或最后面,输出实际得到的文本。

        思路:实际上这题涉及到了在字符串任何位置插入字符,所以用链表模拟。真是菜,模拟个链表还要调试半天。。不过做题用的链表和通常的不太一样,没有使用指针(当然用指针也是可以的),写的时候,一定要搞清楚三个位置,链表头,插入点,链表尾。


#include <iostream>         
#include <stdio.h>         
#include <cmath>         
#include <algorithm>         
#include <iomanip>         
#include <cstdlib>         
#include <string>         
#include <memory.h>         
#include <vector>         
#include <queue>         
#include <stack>         
#include <map>       
#include <set>       
#include <ctype.h>         
#define INF 1000000010     
#define ll long long     
#define max3(a,b,c) max(a,max(b,c))     
#define MAXN 1000

using namespace std;     

char text[100010];
char ans[100010];
int next[100010];

int main(){
	while(~scanf("%s",text)){
		int len=strlen(text);
		int cur=0;
		int k=0;
		int last=0;
		next[0]=-1;
		
		for(int i=0;i<len;i++){
			if(text[i]=='['){
				cur=0;
			}else if(text[i]==']'){
				cur=last;
			}else{
				k++;
				ans[k]=text[i];
				
				int tmp=next[cur];
				
				next[cur]=k;
				next[k]=tmp;
				if(next[k]==-1)last=k;
				cur=k;
			}
		}
		
		int t=next[0];
		while(t!=-1){
			printf("%c",ans[t]);
			t=next[t];
		}
		cout<<endl;
	}
	return 0;
}


你可能感兴趣的:(链表,uva)