在我的电脑上,运行此代码会在输入前就直接 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]);
}