为什么本地通过提交RE
查看原帖
为什么本地通过提交RE
827873
abc1856896楼主2025/1/19 16:29

RE On #6 #9。

显示:

Runtime Error.

Received signal 6: Aborted / IOT trap.

code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int head[100005],G_cnt;
struct data{
	int to;
	int next;
};
data edge[100005];
int degree[100005];
void add_edge(int from,int to) {
	G_cnt++;
	edge[G_cnt].to=to;
	edge[G_cnt].next=head[from];
	degree[to]++;
	head[from]=G_cnt;
    return;
}
struct node{
	int x1;
	int y1;
	int x2;
	int y2;
	int ltr;
};
int cnt;
node pos[30000];
int n,m;
char a[305][305];
int b[30000];
vector<string> ans;
string s;
string kkkkk;
bool vis[100005];
string tran(string p) {
	string ans="";
	for(int i=0;i<p.size();i++) {
		ans[p.size()-i-1]=p[i];
	}
	string k;
	for(int i=0;i<p.size();i++) {
		k+=ans[i];
	}
	return k;
}
void toposort(int x) {
	if(x>cnt) {
		string p=kkkkk;
		for(int i=1;i<x;i++) {
			p+=s[i];
		}
		ans.push_back(tran(p));
		return;
	}
	//cout<<x<<" ";
	for(int i=1;i<=cnt;i++) {
		int v=pos[i].ltr;
		if(!vis[v] && degree[v]==0) {
			vis[v]=true;
			for(int j=head[v];j;j=edge[j].next) {
				degree[edge[j].to]--;
			}
			s[x]=char(pos[i].ltr+'A'-1);
			toposort(x+1);
			vis[v]=false;
			for(int j=head[v];j;j=edge[j].next) {
				degree[edge[j].to]++;
			}
		}
	}
	return;
}
signed main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) {
    	for(int j=1;j<=m;j++) {
    		cin>>a[i][j];
    		b[a[i][j]-'A'+1]++;
    	}
    }
    for(int p=1;p<=26;p++) {
    	if(b[p]) {
    		bool flag=false;
    		cnt++;
    		pos[cnt].ltr=p;
    		for(int i=1;i<=n;i++) {
    			for(int j=1;j<=m;j++) {
    				if((a[i][j]-'A'+1)==p) {
    					if(!flag) {
    						pos[cnt].x1=i;
    						flag=true;
    					}
    					pos[cnt].x2=i;
    				}
    			}
    		}
    		flag=false;
    		for(int i=1;i<=m;i++) {
    			for(int j=1;j<=n;j++) {
    				if((a[j][i]-'A'+1)==p) {
    					if(!flag) {
    						pos[cnt].y1=i;
    						flag=true;
    					}
    					pos[cnt].y2=i;
    				}
    			}
    		}
    	}
    }
    for(int k=1;k<=cnt;k++) {
    	for(int i=pos[k].y1;i<=pos[k].y2;i++) {
    		if(pos[k].ltr^(a[pos[k].x1][i]-'A'+1) && a[pos[k].x1][i]!='.') {
    			add_edge(a[pos[k].x1][i]-'A'+1,pos[k].ltr);
    			//cout<<a[pos[k].x1][i]-'A'+1<<" "<<pos[k].ltr<<endl;
    		}
			if(pos[k].ltr^(a[pos[k].x2][i]-'A'+1) && a[pos[k].x2][i]!='.') {
				add_edge(a[pos[k].x2][i]-'A'+1,pos[k].ltr);
				//cout<<a[pos[k].x2][i]-'A'+1<<" "<<pos[k].ltr<<endl;
			}	
    	}
    	for(int i=pos[k].x1;i<=pos[k].x2;i++) {
    		if(pos[k].ltr^(a[i][pos[k].y1]-'A'+1) && a[i][pos[k].y1]!='.') {
    			add_edge(a[i][pos[k].y1]-'A'+1,pos[k].ltr);
    			//cout<<a[i][pos[k].y1]-'A'+1<<" "<<pos[k].ltr<<endl;
    		}
    		if(pos[k].ltr^(a[i][pos[k].y2]-'A'+1) && a[i][pos[k].y2]!='.') {
    			add_edge(a[i][pos[k].y2]-'A'+1,pos[k].ltr);
    			//cout<<a[i][pos[k].y2]-'A'+1<<" "<<pos[k].ltr<<endl;
    		}
    	}
    }
    toposort(1);
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++) {
    	cout<<ans[i];
    	cout<<endl;
    }
    return 0;
}

求条。

2025/1/19 16:29
加载中...