2015 网赛 北京 - B Mission Impossible 6 模拟
来源:互联网 发布:帝国时代2mac版 编辑:程序博客网 时间:2024/04/29 05:43
纯模拟。。赛前恰好看到神奇的rope!上去直接就用了,不过后来听说没有超时的问题sting都可以过。。
#include <bits/stdc++.h>#include <ext/rope>using namespace std;using namespace __gnu_cxx;int m;char s[10010];struct Line{ rope<char> str; int mode; // 0:insert 1:overwrite int now; int copyStatus; // 0: nothing 1 :start int cp1; // copy postion1 string clip; void init(){ str.clear(); copyStatus = mode = now = 0; clip = ""; } void add(char c){ int len = str.size(); if(mode == 0){ if(len == m) return; str.insert(now,c); now++; }else{ if(len == m && now == len) return; str.replace(now,c); now++; } } void left(){ if(now>0) now--; } void right(){ if(now<str.size()) now++; } void change(){ if(copyStatus == 1) copyStatus = 0; mode = !mode; } void delD(){ if(copyStatus == 1){ int t1 = min(now,cp1), t2 = max(now,cp1); str.erase(t1,t2-t1); copyStatus = 0; now = t1; } else if(now < str.size()){ str.erase(now,1); } //output(); //cout << copyStatus <<endl; } void delB(){ //output(); if(copyStatus == 1) copyStatus = 0; if(now > 0 ){ //cout << str[now-1] << endl; str.erase(now-1,1); //output(); now--; } } void copy(){ if(copyStatus == 0){ copyStatus = 1; cp1 = now; }else{ copyStatus = 0; if(now == cp1) clip = ""; else{ int t1 = min(now,cp1), t2 = max(now,cp1); clip = ""; for(int i=t1;i<t2;i++){ clip += str[i]; } } } } void paste(){ //output(); if(clip=="") return;// for (int i = 0; i < clip.size(); i++) {// cout << clip[i] << endl;// }// cout << "!" << endl;// cout << clip << " " << clip.size() << endl; int len = clip.size(); //cout <<"len: " << str.size() <<" " << len << endl; if(mode == 0){ if(str.size() + len > m) return; //cout <<"@@copy:"; for(int i=0;i<len;i++){ str.insert(now++,clip[i]); //cout << clip[i] ; } //cout << endl; }else{ if(now + len > m) return; //cout << "xxx" << endl; for(int i=0;i<len;i++){ str.replace(now++,clip[i]); } } } void output(){ int len = str.size(); if(len ==0 ) puts("NOTHING"); else{ for(int i=0;i<len;i++){ printf("%c",str[i]); } printf("\n"); } }};void solve(){ int len = strlen(s); Line res; res.init(); for(int i=0;i<len;i++){ if(s[i] >= 'a' && s[i]<='z') { if(res.copyStatus == 1) res.copyStatus = 0; res.add(s[i]); } else if(s[i] == 'L') res.left(); else if(s[i] == 'R') res.right(); else if(s[i] == 'S') res.change(); else if(s[i] == 'D') res.delD(); else if(s[i] == 'B') res.delB(); else if(s[i] == 'C') res.copy(); else if(s[i] == 'V') res.paste(); } res.output();}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&m); scanf("%s",s); solve(); } return 0;}
0 0
- 2015 网赛 北京 - B Mission Impossible 6 模拟
- 2015年ACM北京网络赛 B题Mission Impossible 6-链表模拟
- hihocoder 1228 Mission Impossible 6(2015北京网赛 B)
- 2015北京网赛 Mission Impossible 6
- 2015北京网络赛 Mission Impossible (模拟题)
- hiho 1228 : Mission Impossible 6,北京网络赛B题
- hihoCoder 1228 Mission Impossible 6 2015北京网络赛 大模拟
- 2015ACM北京网赛B题 hihoCoder#1228 Mission Impossible 6
- 1002 Mission Impossible 6 (2015年北京赛区网络赛B题)
- hiho 1228 Mission Impossible 6(模拟)
- hihoCoder 1228 Mission Impossible 6(模拟)
- hihocoder #1228 : Mission Impossible 6 模拟
- hihocoder 1228 Mission Impossible 6(模拟文本编辑器)
- hiho 1228(Mission Impossible 6-模拟文本编辑器)
- Hihocoder 1228 Mission Impossible 6
- hihocoder 1228 Mission Impossible 6
- hihoCoder 1228 Mission Impossible 6
- hiho 1228 Mission Impossible 6
- C#学习日记09---数据类型 之 结构(Struct)类型
- 小圆大圆转圈问题
- 创建存储过程,以部门编号为参数返回该部门的人数及平均工资(返回一个值可以通过函数来实现,但如果要返回多个值,需要使用out或in out模式参数实现)
- logistic回归与牛顿法
- 浅谈C中的malloc和free
- 2015 网赛 北京 - B Mission Impossible 6 模拟
- Android UI ActionBar功能-启动ActionBar
- Java-递归算法思想
- Linux中ifcfg-eth0配置参数说明
- ubuntu+nginx+supervisor部署tornado
- TQ2440 使用Jlink-Flasher 烧写 u-boot 或者 program
- 数据库连接泄露的问题
- 连接线程与等待一个对象
- Spring s2sh 整合(二)