社区讨论
诡异RE求助
学术版参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @lo1kout7
- 此快照首次捕获于
- 2023/10/22 22:37 2 年前
- 此快照最后确认于
- 2023/11/02 11:46 2 年前
非洛谷题,但和题目本身没关系。
一共有多组数据,每一组数据单独跑没问题,合起来 组一起跑就直接RE。
而且调试是成功的,运行就卡死了(即RE)。
应该是指针方面出了问题,但是不知道怎么有问题。
CPP#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<cstdlib>
#include<map>
#define int long long
using namespace std;
typedef long long ll;
const int sze=1e5+10;
int t,n,m;
struct node{
char id;
node* nxt;
inline void update(char iid){
id=iid;
}
};
struct mlist{
node* fst;
node* lst;
int sz;
inline void init(char id){
this->fst=(node*)malloc(sizeof(node));
this->lst=(node*)malloc(sizeof(node));
node* p=(node*)malloc(sizeof(node));
if(p==nullptr) exit(0);
p->update(id);
//cout<<"INIT: $\n";
p->nxt=nullptr;
this->fst->nxt=p;this->lst->nxt=p;
this->sz=1;
}
inline void push_front(char id){
node* p=this->fst->nxt;
node* s=(node*)malloc(sizeof(node));
if(s==nullptr) exit(0);
s->update(id);
s->nxt=p;
this->fst->nxt=s;
this->sz++;
}
inline void push_last(char id){
node* p=this->lst->nxt;
node* q=(node*)malloc(sizeof(node));
if(q==nullptr) exit(0);
q->update(id);
p->nxt=q;
q->nxt=nullptr;
this->lst->nxt=q;
this->sz++;
}
inline void traverse(){
node* p=this->fst->nxt;
while(p->nxt!=nullptr){
if(p->id!='$') cout<<p->id;
p=p->nxt;
}
if(p->id!='$') cout<<p->id<<'\n';
else cout<<'\n';
}
inline void delete_loc(int loc){
node* p=this->fst;
node* q=(node*)malloc(sizeof(node));
if(q==nullptr) exit(0);
for(int i=0;i<loc;i++) p=p->nxt;
if(p->id=='$') return;
q=p->nxt;
p->nxt=q->nxt;
free(q);
this->sz--;
}
inline void update_loc(int loc,char val){
node* p=this->fst->nxt;
if(loc==0) return this->fst->nxt->update(val),void();
for(int i=0;i<=loc;i++) p=p->nxt;
p->update(val);
}
inline void ins_loc(int loc,char val){
node* p=this->fst;
node* q=(node*)malloc(sizeof(node));
if(q==nullptr) exit(0);
q->update(val);
if(loc==0) return push_front(val);
for(int i=0;i<loc;i++) p=p->nxt;
q->nxt=p->nxt;
p->nxt=q;
if(loc==this->sz) this->lst->nxt=q;
this->sz++;
}
inline void checkEOL(){
node* p=this->lst->nxt;
if(p->id!='$') ins_loc(this->sz,'$')/*,push_last('$'),cout<<"$ added\n"*/;
}
inline void cls(char id){
if(this->sz==1) return;
node* p=this->fst->nxt;
node* q=(node*)malloc(sizeof(node));
if(q==nullptr) exit(0);
while(p->nxt!=nullptr){
q=p;
p=p->nxt;
q->nxt=nullptr;
free(q);
}
this->fst->nxt=this->lst->nxt=p;
p->nxt=nullptr;
p->update(id);
this->sz=1;
}
}l;
signed main(){
//ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>t;
//l.init('$');
while(t--){
l.init('$');
string s;
cin>>n>>s;
int pos=0;
for(int i=0;i<n;i++){
if(s[i]=='r'){
//cout<<"-------------------r-------------------\n";
continue;
}
else if(s[i]=='I')
pos=0;
else if(s[i]=='H'){
--pos;
pos=max(0ll,pos);
}
else if(s[i]=='L'){
++pos;
pos=min(l.sz,pos);
}
else if(s[i]=='x')
l.delete_loc(pos);
else if(i>0&&s[i-1]=='r')
l.update_loc(pos,s[i]);
else{
++pos;
l.ins_loc(pos-1,s[i]);
}
l.checkEOL();
// cout<<" ";
// for(int i=0;i<pos;i++) cout<<' ';
// cout<<"p\n";
// cout<<"Under Instruction of "<<s[i]<<" : ";
// l.traverse();
}
l.traverse();
}
return 0;
}
样例
CPP1
25
12345HHHr9Ir000LLLLL876Ix
以及
CPP1
20
r60xxxxHx4xHH3III1I2
都能过,但是合成一下:
CPP2
25
12345HHHr9Ir000LLLLL876Ix
20
r60xxxxHx4xHH3III1I2
就过不了了......
求助各位大佬
回复
共 7 条回复,欢迎继续交流。
正在加载回复...