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

    #include <cstdio>
    #include <cstdlib>
    #include <vector>
    
    using namespace std;
    
    int swap(vector<int> &numpos, int va, int vb) {
        //printf("swap(%d at %d, %d at %d)
    ", va, numpos[va], vb, numpos[vb]);
        int pa = numpos[va];
        int pb = numpos[vb];
        numpos[va] = pb;
        numpos[vb] = pa;
    }
    
    int pick_first_mismatch_value(vector<int> &numpos, int start) {
        int i = start;
        int len = numpos.size();
        while (i < len) {
            if (numpos[i] != i) {
                return i;
            
            }
            i++;
        }
        return -1;
    }
    
    int main() {
        int N;
        scanf("%d", &N);
        
        vector<int> numpos(N);
        
        int value;
        for (int i=0; i<N; i++) {
            scanf("%d", &value);
            numpos[value] = i;
        }
        
        int step = 0;
        int b = 0;
        for (;;) {
            if (numpos[0] == 0) {
                b = pick_first_mismatch_value(numpos, b);
                if (b <= 0) {
                    break;
                }
                swap(numpos, 0, b);
                step++;
                continue;
            }
            swap(numpos, 0, numpos[0]);
    
            step++;
        }
        
        printf("%d", step);
        
        return 0;
    }
  • 相关阅读:
    产品微谈
    SVN回滚机制
    super究竟是个啥?
    PM12条
    CocoaPods初体验
    UIView局部点击
    Memory cycles about Block
    About "self"
    openfire学习(一)
    WPF菜单和布局(2)
  • 原文地址:https://www.cnblogs.com/lailailai/p/4109574.html
Copyright © 2011-2022 走看看