UVa-11988 悲剧文本
来源:互联网 发布:疯瞳世界淘宝 编辑:程序博客网 时间:2024/04/30 22:34
分析:这个题的题意还是很好理解的,就是如果'['便返回开头,']'便到尾部之后再继续输出。惯性思维,这个题用
数组存储,之后移动数组元素,这样做的效率是非常低的,数据太大会超时。如果想插入元素的速度快,链表,插入
是O(1)(想到这里,我就中陷阱了,错误的以为,vector等同于链表,其实不尽然,vector仍然是一块连续的空间
,插入的效率和C语言里的数组类似,所以,我便跪了数次,~~~~悲伤~~~~)。用链表也有好几种方式,可以用数组模
拟一个链表,也可以用结构体定义节点,最贱的还数STL里的list。
数组模拟的代码:
#include <cstdio>
#include <cstring>
const int maxn=100005;
int wei,head,next[maxn];
char s[maxn];
int main()
{
while(scanf("%s",s+1)!=EOF)
{
int n=strlen(s+1);
head=wei=0;
next[0]=0;
#include <cstring>
const int maxn=100005;
int wei,head,next[maxn];
char s[maxn];
int main()
{
while(scanf("%s",s+1)!=EOF)
{
int n=strlen(s+1);
head=wei=0;
next[0]=0;
for (int i=1;i<=n;i++)
{
char ch=s[i];
if (ch=='[') head=0;
else if (ch==']') head=wei;
else
{
next[i]=next[head];
next[head]=i;
if (head==wei) wei=i;
head=i;
}
}
for (int i=next[0];i!=0;i=next[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}
{
char ch=s[i];
if (ch=='[') head=0;
else if (ch==']') head=wei;
else
{
next[i]=next[head];
next[head]=i;
if (head==wei) wei=i;
head=i;
}
}
for (int i=next[0];i!=0;i=next[i])
printf("%c",s[i]);
printf("\n");
}
return 0;
}
用STL写的代码:
#include <cstdio>
#include <cstring>
#include <list>
#include <iostream>
using namespace std;
int main()
{
char str[100005];
list <char> s;
while (scanf("%s",str)!=EOF)
{
list <char>::iterator it=s.begin();
int n=strlen(str);
for (int i=0;i<n;i++)
{
char ch=str[i];
if (ch=='[') it=s.begin();
else if(ch==']') it=s.end();
else
{
it=s.insert(it,ch);
it++;
}
}
for (it=s.begin();it!=s.end();it++)
printf("%c",*it);
s.clear();
printf("\n");
}
return 0;
}
#include <cstring>
#include <list>
#include <iostream>
using namespace std;
int main()
{
char str[100005];
list <char> s;
while (scanf("%s",str)!=EOF)
{
list <char>::iterator it=s.begin();
int n=strlen(str);
for (int i=0;i<n;i++)
{
char ch=str[i];
if (ch=='[') it=s.begin();
else if(ch==']') it=s.end();
else
{
it=s.insert(it,ch);
it++;
}
}
for (it=s.begin();it!=s.end();it++)
printf("%c",*it);
s.clear();
printf("\n");
}
return 0;
}
0 0
- UVa-11988 悲剧文本
- UVa 11988 悲剧文本 采用链表
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text) 悲剧文本 链表
- 紫书章六例题四 悲剧文本 UVA 11988 (用数组模拟单向链表/递归)
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(破损的键盘(又名:悲剧的文本))(链表)
- 链表-单向链表&&UVa 11988 Broken Keyboard(a.k.a.Beijiu Text)(破损的键盘(悲剧文本))的理解与解析
- 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)
- UVa11988 Broken Keyboard(悲剧文本)
- UVA11988——悲剧文本
- uva11988 broken keyboard (悲剧文本)
- 破损的键盘(又名:悲剧文本)
- 例题6-4 UVA11988 悲剧文本
- 悲剧
- 悲剧
- 悲剧~~~
- 悲剧
- 悲剧
- 悲剧
- iOS中 简单抽屉效果(MMDrawerController)的实现
- Mac OS X 下搭建 Java 开发环境图解
- week14---12月11日 JS内置对象——document文档对象、Dom对象
- C++11 学习笔记 模板的细节(右尖括号,using,函数模板默认参数)
- servlet打开一个jsp莫名乱码问题
- UVa-11988 悲剧文本
- HD_1395 2^x mod n = 1
- 《代码大全》之变量名的力量
- [Jquery]邮箱地址是否输入和格式是否正确的判断
- struts2所必须的jar包
- ISBN
- 关于cocos2dx的背景音乐和音效(3)
- mysql基础语句
- 删除排序数组中的重复数字——LintCode