社区讨论

诡异RE求助

学术版参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo1kout7
此快照首次捕获于
2023/10/22 22:37
2 年前
此快照最后确认于
2023/11/02 11:46
2 年前
查看原帖
非洛谷题,但和题目本身没关系。
一共有多组数据,每一组数据单独跑没问题,合起来 TT 组一起跑就直接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;
}
样例
CPP
1
25
12345HHHr9Ir000LLLLL876Ix
以及
CPP
1
20
r60xxxxHx4xHH3III1I2
都能过,但是合成一下:
CPP
2
25
12345HHHr9Ir000LLLLL876Ix
20
r60xxxxHx4xHH3III1I2
就过不了了......
求助各位大佬

回复

7 条回复,欢迎继续交流。

正在加载回复...