码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4985 Little Pony and Permutation(数学 置换群)

时间:2014-09-09 12:58:28      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:hdu   数学   置换群   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4985


置换群:http://baike.baidu.com/view/1879054.htm?fr=aladdin


Little Pony and Permutation




Problem Description
bubuko.com,布布扣

As a unicorn, the ability of using magic is the distinguishing feature among other kind of pony. Being familiar with composition and decomposition is the fundamental course for a young unicorn. Twilight Sparkle is interested in the decomposition of permutations. A permutation of a set S = {1, 2, ..., n} is a bijection from S to itself. In the great magician —— Cauchy‘s two-line notation, one lists the elements of set S in the first row, and then for each element, writes its image under the permutation below it in the second row. For instance, a permutation of set {1, 2, 3, 4, 5} σ can be written as:

bubuko.com,布布扣

Here σ(1) = 2, σ(2) = 5, σ(3) = 4, σ(4) = 3, and σ(5) = 1.
Twilight Sparkle is going to decompose the permutation into some disjoint cycles. For instance, the above permutation can be rewritten as:

bubuko.com,布布扣

Help Twilight Sparkle find the lexicographic smallest solution. (Only considering numbers).
 
Input
Input contains multiple test cases (less than 10). For each test case, the first line contains one number n (1<=n<=10^5). The second line contains n numbers which the i-th of them(start from 1) is σ(i). 

Output
For each case, output the corresponding result.
 
Sample Input
5 2 5 4 3 1 3 1 2 3
 
Sample Output
(1 2 5)(3 4) (1)(2)(3)
 
Source


题意:

题意较难理解,其实就是一个置换群!

看代码就会理解题意!


代码如下:

/*#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

const int N = 100005;

int n, a[N], vis[N];

int main()
{
    while (~scanf("%d", &n))
    {
        memset(vis, 0, sizeof(vis));
        for (int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for (int i = 1; i <= n; i++)
        {
            if (vis[i])
                continue;
            int t = i;
            printf("(%d", t);
            vis[t] = 1;
            t = a[t];
            while (vis[t] == 0)
            {
                vis[t] = 1;
                printf(" %d", t);
                t = a[t];
            }
            printf(")");
        }
        printf("\n");
    }
    return 0;
}*/


#include <cstdio>
#include <cstring>
int main()
{
    int n;
    int a[100017], f[100017];
    while(~scanf("%d",&n))
    {
        memset(f,0,sizeof(f));
        for(int i = 1; i <= n; i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i = 1; i <= n; i++)
        {
            if(f[i])
                continue;
            int t = i;
            f[t] = 1;
            printf("(%d",t);
            while(f[a[t]] == 0)
            {
                printf(" %d",a[t]);
                f[a[t]] = 1;
                t = a[t];
            }
            printf(")");
        }
        printf("\n");
    }
    return 0;
}


HDU 4985 Little Pony and Permutation(数学 置换群)

标签:hdu   数学   置换群   

原文地址:http://blog.csdn.net/u012860063/article/details/39139939

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!