列表

详情


NC238589. 置换

描述

给定长度为n的置换AB,问是否存在一个正整数k,使得

置换可以被理解为一个的双射FF_i表示数字i经过该映射变换后的数字。置换的k次幂被定义为映射的k次复合。

例:是一个长度为5的置换,,即

注:本题并不要求计算出k的值,只是判断k的存在性。

输入描述

第一行一个数T表示数据组数。
接下来有T组数据,每组数据:
第一行一个正整数数n,接下来一行n个正整数表示A,接下来一行n个正整数表示B
保证给出的都是合法的置换。

输出描述

对于每组数据,一行输出(大小写敏感)表示是否存在符合条件的k

示例1

输入:

2
5
1 3 2 5 4
1 2 3 4 5
4
1 2 3 4
1 2 4 3

输出:

Yes
No

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 681ms, 内存消耗: 1224K, 提交时间: 2022-07-19 19:37:14

#include<bits/stdc++.h>
using namespace std;
int s[1000050];
int ss[1000050];
int main(){
	int t;
	cin>>t;
	while(t--){
		int n;
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>s[i];
		}
		for(int i=1;i<=n;i++){
			cin>>ss[i];
		}
		int f=0;
		for(int i=1;i<=n;i++){
			if(s[s[i]]==i&&s[s[i]]!=ss[i]){
				f=1;
				break;
			}
		}
		cout<<(f?"No":"Yes")<<endl;
	}
	return 0;
} 

上一题