zoukankan      html  css  js  c++  java
  • USACO 2.1-Sorting a Three-Valued Sequence

    题目链接:http://train.usaco.org/usacoprob2?a=bzdILz0bsTb&S=sort3

    /*
    ID: m1590291
    TASK: sort3
    LANG: C++
    */
    #include <iostream>
    #include <fstream>
    #include <algorithm>
    using namespace std;
    /****************************************************************************************************************
                    题意:给定的一个1,2,3组成的数字序列,排成升序所需的最少交换次数。
                    思路:
                    一,前后位置不相同的组成N个环,所有环的长度和减去环的个数就是所得解
                    二,图没有那么熟悉,就用了第二种,也是超NB的一种思路
                       1,如果两数位置都错了,并且交换后都在正确的位置,这一次交换肯定是必然的
                          跑一遍 把所有的符合上述条件的数交换回来 每次交换 num++;
                       2,剩下的就是3个数的位置都是错的,也可以通过两次交换达到正确位置 每次交换  num+=2;
                          其实可以不用交换,就检查一下在1的位置上有多少个不是1的,乘2即可
    ****************************************************************************************************************/
    int a[1005],b[1005];
    int main()
    {
        ifstream fin("sort3.in");
        ofstream fout("sort3.out");
    
        int N;
        while(fin>>N)
        {
            for(int i = 0;i < N;i ++){
                fin>>a[i];
                b[i]=a[i];
            }
            sort(a,a+N);
            int num=0;
            int t;
            for(int i = 0;i < N;i ++){
                for(int j = 0;j < N;j ++){
                    if(i == j)  continue;
                    if(b[i] != b[j] && b[i] == a[j] && b[j] == a[i]){
                        //fout<<"i= "<<i<<" j= "<<j<<endl;
                        //fout<<"b[i]= "<<b[i]<<" b[j]= "<<b[j]<<endl;
                        t=b[j];
                        b[j]=b[i];
                        b[i]=t;
                        num++;
                        break;
                    }
                }
            }
            //fout<<num<<endl;
            for(int i = 0;i < N;i ++)
                if(a[i] == 1 && b[i] != 1)
                    num+=2;
            fout<<num<<endl;
        }
        return 0;
    }
    



  • 相关阅读:
    GUI学习笔记之一“Hello world”程序
    GDI和GUI的区别
    Convert.Int32、(int)和int.Parse三者的区别
    华为机试题汇总
    算法导论 第7章 课后习题
    算法导论 第8章 线性时间排序 课后习题
    算法导论 第21章 不相交集合的数据结构
    [转载]NIM(1) 一排石头的游戏
    算法导论 第22章 图论之拓扑排序
    编程珠玑第八章 算法设计艺术
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6351999.html
Copyright © 2011-2022 走看看