例题6-4 破损的键盘 UVa 11988
来源:互联网 发布:pscc是什么软件 编辑:程序博客网 时间:2024/05/01 13:23
题意:字符'['表示句首,就是光标移到了句首,’】‘表示句尾
法一:用链表模拟光标移动
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int maxn=100005;int last,cur,next[maxn];char s[maxn];int main(){ //freopen("f.txt","r",stdin); while(scanf("%s",s+1)==1){ int n=strlen(s+1); last=cur=0; next[0]=0; 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]; next[cur]=i; if(cur==last)last=i; cur=i; } } for(int i=next[0];i!=0;i=next[i]){ printf("%C",s[i]); } printf("\n"); } return 0;}
法二:这题看到有人用双端队列,把[加入队首,】加入队尾,再按照队列中的顺序输出
#include <iostream>#include <string>#include <vector>#include <cstdio>#include <deque>using namespace std;char str[100010];int main(){ // freopen("f.txt","r",stdin); while(scanf("%s",str)!=EOF){ deque<int > q; int i=0; while(str[i]=='['||str[i]==']') i++; q.push_front(i); while(str[i]){ if(str[i]=='['){ q.push_front(i+1); str[i]='\0'; } else if(str[i]==']'){ q.push_back(i+1); str[i]='\0'; } i++; } while(!q.empty()){ printf("%s",str+q.front()); q.pop_front(); } printf("\n"); } return 0;}
法三:
分析:给出的一行文本,从后往前看,如果遇到】,那么】后面的字符串一定在最后,后面的字符串一定在最前,再往前移动还是这样的规律,所以这题可以用递归解决;
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#include <cmath>using namespace std;char buf[100001];void dfs(int l, int r){int s = r;while (s >= l && buf[s] != '[' && buf[s] != ']') s --;if (buf[s] == ']') dfs(l, s-1);for (int i = s+1 ; i <= r ; ++ i)printf("%c",buf[i]);if (buf[s] == '[') dfs(l, s-1);}int main(){ // freopen("f.txt","r",stdin);while (gets(buf)) {dfs(0, strlen(buf)-1);printf("\n");} return 0;}
0 0
- 例题6-4 破损的键盘 UVa 11988
- Uva 11988 例题6-4 破损的键盘
- 例题6-4 UVA 11988 Broken Keyboard (a.k.a. Beiju Text) 破损的键盘
- 例题6-4 破损的键盘 UVa11988
- UVa 11988破损的键盘
- UVA 11988 破损的键盘
- 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)
- uva 11988 破损的键盘(链表)
- 破损的键盘(uva 11988)
- 破损的键盘(Broken KeyBoard)Uva 11988
- UVa 11988 破损的键盘 链表 双向队列
- 2017-8-21破损的键盘 UVa 11988
- Broken Keyboard 破损键盘 UVA 11988
- 破损的键盘(链表)
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(破损的键盘(又名:悲剧的文本))(链表)
- 【codevs 4650】破损的键盘
- 破损的键盘,紫书P143UVa11988
- 【codevs 4650】破损的键盘
- qtopia2.0桌面环境和qt4应用程序共存の法
- 函数参数的三种传值方式
- ping 探测路径mtu大小
- java设计模式第10弹--享元模式
- httpcomponents-client 使用小结
- 例题6-4 破损的键盘 UVa 11988
- C#多线程编程
- 面试记录
- 2015年9月15日工作日志-------------赵鑫
- Mysql命令行添加用户
- JAVA中复杂对象调用构造器顺序
- 安装MySql解压版
- Android——Carema的使用
- javaIO体系图(2015年9月15日)