TOJ 2132.Ambiguous permutations

题目链接:http://acm.tju.edu.cn/toj/showp2132.html


2132.    Ambiguous permutations
Time Limit: 2.0 Seconds    Memory Limit: 65536K
Total Runs: 987    Accepted Runs: 683



Some programming contest problems are really tricky: not only do they require a different output format from what you might have expected, but also the sample output does not show the difference. For an example, let us look at permutations.
permutation of the integers  1 to  n is an ordering of these integers. So the natural way to represent a permutation is to list the integers in this order. With  n = 5, a permutation might look like 2, 3, 4, 5, 1. 
However, there is another possibility of representing a permutation: You create a list of numbers where the  i-th number is the position of the integer  i in the permutation. Let us call this second possibility an  inverse permutation. The inverse permutation for the sequence above is 5, 1, 2, 3, 4. 
An  ambiguous permutation is a permutation which cannot be distinguished from its inverse permutation. The permutation 1, 4, 3, 2 for example is ambiguous, because its inverse permutation is the same. To get rid of such annoying sample test cases, you have to write a program which detects if a given permutation is ambiguous or not.

Input Specification

The input contains several test cases.
The first line of each test case contains an integer n (1 ≤ n ≤ 100000). Then a permutation of the integers 1 to n follows in the next line. There is exactly one space character between consecutive integers. You can assume that every integer between 1 and n appears exactly once in the permutation. 
The last test case is followed by a zero.

Output Specification

For each test case output whether the permutation is ambiguous or not. Adhere to the format shown in the sample output.

Sample Input

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

Sample Output

ambiguous
not ambiguous
ambiguous


Source: University of Ulm Local Contest 2005
Submit   List    Runs   Forum   Statistics

题目简述】:其实就是根据题目描述:A permutation of the integers 1 to n is an ordering of these integers. So the natural way to represent a permutation is to list the integers in this order. With n = 5, a permutation might look like 2, 3, 4, 5, 1. 
However, there is another possibility of representing a permutation: You create a list of numbers where the i-th number is the position of the integer i in the permutation. Let us call this second possibility an inverse permutation. The inverse permutation for the sequence above is 5, 1, 2, 3, 4. 

An ambiguous permutation is a permutation which cannot be distinguished from its inverse permutation.The permutation 1, 4, 3, 2 for example is ambiguous,because its inverse permutation is the same. To get rid of such annoying sample test cases, you have to write a program which detects if a given permutation is ambiguous or not.


【分析】:看我加红的部分,就是说如果叫做ambiguous permutation的话,就要通过这样的变换方式后还是same.否则的话就是not ambiguous。

这种方式就是如下:

数字的新旧位置互换,即是数组的下标是所谓旧位置,而这个数列本身的数字又代表一种新的位置,我们按照数字所显示的,将该数字所对应的下标变成序列中的值,便形成了新的序列。


如: 2    3    4   5    1      //  原序列

       [1]   [2]  [3]  [4] [5]    //  数组下标

经过变换后:


        [5]  [1]  [2]  [3]  [4]    //  此时新的序列就是  5  1   2  3   4,因为与原序列 2  3  4  5  1不同,所以就是not  ambiguous

         1    2    3    4     5


见代码:

#include <stdio.h>
int main(){
	int a[100001],n;
	while(~scanf("%d",&n),n){
		bool flag=true;
		for(int i=1;i<=n;i++)
			scanf("%d",&a[i]);
		for(int i=1;i<=n;i++)
			if(a[a[i]]!=i){
				flag=false;
				break;
			}
		if(flag)
			printf("ambiguous\n");
		else
			printf("not ambiguous\n");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值