码迷,mamicode.com
首页 > 其他好文 > 详细

Uva 11988 Broken Keyboard STL+链表

时间:2017-02-10 17:53:36      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:存在   uva   highlight   const   节点   include   keyboard   else   begin   

两种方法,直接上代码

STL标准模板库

#include <iostream>
#include <list>
#include <algorithm>
#include <cstdio>
using namespace std;
const maxn=100000+5;
char str[maxn];
typedef list<char> L;
int main(){
	while(gets(str)){
		L l;
		L::iterator p;
		int len=strlen(str);
		for(int i=0;i<len;i++){
			if (str[i]==‘[‘) p=l.begin();
			else if(str[i]==‘]‘) p=l.end();
			else l.insert(p,str[i]);
		}
		for(p=l.begin();p!=l.end();p++)
			printf("%c",*p);
		printf("\n");
	}
	return 0;
}

数组模拟链表

#include <cstdio>
#include <cstring>
const int maxn=100000+5;
int last,cur,next[maxn];//光标位于cur字号的后面
char s[maxn];
int main(){
	while(scanf("%s",s+1)==1){
		int n=strlen(s+1);//输入保存在s[1],s[2],s[3],后面
		cur=last=0;
		next[0]=0;//头节点指向空
/*
   从1到n逐个遍历
*/
for (int i=1;i<=n;i++){
	char ch=s[i];
	if (ch==‘[‘) cur=0;
	else if (ch==‘]‘) cur=last;
	//交换性伴侣
	else {
		next[i]=next[cur];//新来的结点插向gay2p的后者
		next[cur]=i;//gay2p的前者插向新来的结点
		if (cur==last) last=i;//更新"最后一个字符"的编号
	    cur=i;//改变搜索2p对
	}
}
for(int i=next[0];i!=0;i=next[i])
	printf("%c",s[i]);
printf("\n");
	}
	return 0;
}

  

Uva 11988 Broken Keyboard STL+链表

标签:存在   uva   highlight   const   节点   include   keyboard   else   begin   

原文地址:http://www.cnblogs.com/mdz-great-world/p/6387141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!