zoukankan      html  css  js  c++  java
  • 1067. Sort with Swap(0,*) (25)

     

    时间限制
    150 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    Given any permutation of the numbers {0, 1, 2,..., N-1}, it is easy to sort them in increasing order. But what if Swap(0, *) is the ONLY operation that is allowed to use? For example, to sort {4, 0, 2, 1, 3} we may apply the swap operations in the following way:

    Swap(0, 1) => {4, 1, 2, 0, 3}
    Swap(0, 3) => {4, 1, 2, 3, 0}
    Swap(0, 4) => {0, 1, 2, 3, 4}

    Now you are asked to find the minimum number of swaps need to sort the given permutation of the first N nonnegative integers.

    Input Specification:

    Each input file contains one test case, which gives a positive N (<=105) followed by a permutation sequence of {0, 1, ..., N-1}. All the numbers in a line are separated by a space.

    Output Specification:

    For each case, simply print in a line the minimum number of swaps need to sort the given permutation.

    Sample Input:
    10 3 5 7 2 6 4 9 0 8 1
    
    Sample Output:
    9

     1 #include <stdio.h>
     2 #include<algorithm>
     3 using namespace std;
     4 int main()
     5 {
     6     int n;
     7     int loc[100000];
     8     while(scanf("%d",&n)!=EOF)
     9     {
    10         
    11 
    12         int tem,i,left;
    13         left = n-1;
    14         for(i=0;i<n;i++)
    15         {
    16             scanf("%d",&tem);
    17             loc[tem] = i;
    18             if(tem == i && i!=0)
    19                 --left;
    20         }
    21 
    22         int count = 0;
    23         int k = 1;
    24         while(left > 0)
    25         {
    26             if(loc[0]==0)
    27             {
    28                while(k < n)
    29                {
    30                   if( loc[k] != k )
    31                   {
    32                       swap(loc[0],loc[k]);
    33                       ++count;
    34                       break;
    35                   }
    36                   ++k;
    37                }
    38             }
    39 
    40 
    41             while(loc[0]!=0)
    42             {
    43                 swap(loc[0],loc[loc[0]]);
    44                 ++count;
    45                 --left;
    46             }
    47 
    48         }
    49 
    50         printf("%d
    ",count);
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    Java消息队列-Spring整合ActiveMq
    控制 Memory 和 CPU 资源的使用
    真的了解js生成随机数吗
    vue原来可以这样上手
    Weex系列一、构建Weex工程
    MS Word 目录排版
    mac上使用终端编译omp代码
    x的平方根
    如何进行特征选择
    单词模式
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/4276095.html
Copyright © 2011-2022 走看看