Submission #1695294


Source Code Expand

#include<bits/stdc++.h>
#define N 100005
#define ll long long
#define P 1000000007
using namespace std;
int n,fa[N],b[N],rd[N],fl[N],sum[N];
void biu()
{
	puts("0");
	exit(0);
}
void dfs(int x)
{
	if (fl[fa[x]]) biu();
	rd[fa[x]]--;fl[fa[x]]=fl[x]+1;rd[x]=-1;
	if (rd[fa[x]]==0) dfs(fa[x]);
}
int F(int x,int k)
{
	static int f[N];
	f[0]=1;f[1]=2;
	for (int i=2;i<=x;i++)
		f[i]=(f[i-1]*2+(ll)f[i-2]*(i-1)%P*k)%P;
	return f[x];
}
int G(int x,int k)
{
//	cout<<x<<' '<<k<<endl;
	static int g[N];
	g[0]=1;g[1]=1;
	for (int i=2;i<=x;i++)
		g[i]=(g[i-1]+(ll)g[i-2]*(i-1)%P*k)%P;
	return g[x];
}
int main()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
		scanf("%d",&fa[i]),rd[fa[i]]++;
	for (int i=1;i<=n;i++)
		if (rd[i]==0) dfs(i);
	int Ans=1;
	for (int i=1;i<=n;i++)
		if (rd[i]==1)
		{
			int x=i,y=fa[i],cnt=0,flag=0;
			b[++cnt]=fl[i];
			if (fl[i]) flag=cnt;
			for (;y!=i;y=fa[y],x=fa[x])
			{
				b[++cnt]=fl[y];rd[y]=0;
				if (fl[y]) flag=cnt;
			}
			//cout<<cnt<<' '<<flag<<endl;
			if (!flag) sum[cnt]++;
			else
			{
				flag=flag-cnt;
				for (int j=1;j<=cnt;j++)
				{
					//cout<<b[j]<<endl;
					if (b[j])
					{
						if (b[j]>j-flag) biu();
						if (b[j]<j-flag) Ans=Ans*2%P;
						flag=j;
					}
				}
			}
		}
	//	cout<<Ans<<endl;
	for (int i=1;i<=n;i++)
	{
	//	cout<<i<<' '<<sum[i]<<endl;
		if ((i&1)&&i!=1) Ans=(ll)Ans*F(sum[i],i)%P;
		else Ans=(ll)Ans*G(sum[i],i)%P;
	}
	printf("%d\n",Ans);
}

Submission Info

Submission Time
Task E - Next or Nextnext
User miaom
Language C++14 (GCC 5.4.1)
Score 1400
Code Size 1491 Byte
Status AC
Exec Time 13 ms
Memory 1664 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:37:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d",&n);
                ^
./Main.cpp:39:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&fa[i]),rd[fa[i]]++;
                                 ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1400 / 1400
Status
AC × 5
AC × 59
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 0_04.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 0_04.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt, 1_37.txt, 1_38.txt, 1_39.txt, 1_40.txt, 1_41.txt, 1_42.txt, 1_43.txt, 1_44.txt, 1_45.txt, 1_46.txt, 1_47.txt, 1_48.txt, 1_49.txt, 1_50.txt, 1_51.txt, 1_52.txt, 1_53.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KB
0_01.txt AC 1 ms 256 KB
0_02.txt AC 1 ms 256 KB
0_03.txt AC 1 ms 256 KB
0_04.txt AC 1 ms 256 KB
1_00.txt AC 1 ms 256 KB
1_01.txt AC 12 ms 1408 KB
1_02.txt AC 12 ms 1280 KB
1_03.txt AC 12 ms 1152 KB
1_04.txt AC 13 ms 1152 KB
1_05.txt AC 13 ms 1280 KB
1_06.txt AC 13 ms 1408 KB
1_07.txt AC 13 ms 1024 KB
1_08.txt AC 13 ms 1408 KB
1_09.txt AC 11 ms 1024 KB
1_10.txt AC 13 ms 1408 KB
1_11.txt AC 11 ms 1024 KB
1_12.txt AC 13 ms 1664 KB
1_13.txt AC 13 ms 1664 KB
1_14.txt AC 13 ms 1664 KB
1_15.txt AC 13 ms 1664 KB
1_16.txt AC 13 ms 1664 KB
1_17.txt AC 13 ms 1664 KB
1_18.txt AC 13 ms 1408 KB
1_19.txt AC 13 ms 1408 KB
1_20.txt AC 13 ms 1408 KB
1_21.txt AC 13 ms 1408 KB
1_22.txt AC 13 ms 1664 KB
1_23.txt AC 13 ms 1664 KB
1_24.txt AC 13 ms 1664 KB
1_25.txt AC 13 ms 1664 KB
1_26.txt AC 13 ms 1536 KB
1_27.txt AC 13 ms 1664 KB
1_28.txt AC 12 ms 1408 KB
1_29.txt AC 11 ms 1408 KB
1_30.txt AC 13 ms 1152 KB
1_31.txt AC 13 ms 1152 KB
1_32.txt AC 13 ms 1152 KB
1_33.txt AC 13 ms 1152 KB
1_34.txt AC 13 ms 1536 KB
1_35.txt AC 13 ms 1536 KB
1_36.txt AC 11 ms 1408 KB
1_37.txt AC 12 ms 1536 KB
1_38.txt AC 13 ms 1536 KB
1_39.txt AC 13 ms 1536 KB
1_40.txt AC 12 ms 1408 KB
1_41.txt AC 12 ms 1408 KB
1_42.txt AC 13 ms 1024 KB
1_43.txt AC 13 ms 1024 KB
1_44.txt AC 13 ms 1024 KB
1_45.txt AC 13 ms 1024 KB
1_46.txt AC 13 ms 1408 KB
1_47.txt AC 13 ms 1408 KB
1_48.txt AC 13 ms 1408 KB
1_49.txt AC 13 ms 1408 KB
1_50.txt AC 13 ms 1408 KB
1_51.txt AC 13 ms 1408 KB
1_52.txt AC 12 ms 1408 KB
1_53.txt AC 13 ms 1408 KB