求助本地运行代码还未输入就 RE
  • 板块学术版
  • 楼主ezoixx130Chopin
  • 当前回复59
  • 已保存回复59
  • 发布时间2020/7/15 16:00
  • 上次更新2023/11/7 11:01:18
查看原帖
求助本地运行代码还未输入就 RE
34886
ezoixx130Chopin楼主2020/7/15 16:00

在我的电脑上,运行此代码会在输入前就直接 RE 退出,不知道原因。

如果用 gdb 运行也在输入前就 RE,错误信息为:

Starting program: a.exe
[New Thread 14468.0xbcc]
[New Thread 14468.0x2e3c]
[New Thread 14468.0x2294]
[New Thread 14468.0x2bec]

Thread 1 received signal SIGSEGV, Segmentation fault.
___chkstk_ms () at ../../../../../src/gcc-8.1.0/libgcc/config/i386/cygwin.S:126
126     ../../../../../src/gcc-8.1.0/libgcc/config/i386/cygwin.S: No such file or directory.

不知道其他环境下会不会有同样的现象,另外想知道原因是什么。

感谢。

输入(虽然根本就输入不了):

3
3 2 1
3 2 1

代码:

#include <bits/stdc++.h>
using namespace std;

#define MAXN 100010

int n;

struct per
{
	int a[MAXN];
	per operator*(per p)
	{
		per ans;
		for(int i=1;i<=n;++i)ans.a[i]=a[p.a[i]];
		return ans;
	}
	per inv()
	{
		per ans;
		for(int i=1;i<=n;++i)ans.a[a[i]]=i;
		return ans;
	}
	per operator^(int k)
	{
		per ans,now;
		for(int i=1;i<=n;++i)ans.a[i]=i;
		now=*this;
		while(k)
		{
			if(k&1)ans=ans*now;
			now=now*now;
			k>>=1;
		}
		return ans;
	}
};

int main()
{
	per p,q;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)scanf("%d",&p.a[i]);
	for(int i=1;i<=n;++i)scanf("%d",&q.a[i]);
	per res=p*q*p.inv()*q.inv();
	for(int i=1;i<=n;++i)printf("%d ",res.a[i]);
}
2020/7/15 16:00
加载中...