• 美妙的约会


    题目链接:

    题目描述

    牛牛和妞妞在一天晚上决定一起去看一场情人节演唱会,可是由于这场演唱会实在太出名了,有很多情侣都来观看,牛牛和妞妞不小心被人流冲散了!
    维持秩序的人决定,让大家排成一列,相邻两个进去的人(2k-1和2k,k为正整数)坐在相邻座位。但是现在的队伍乱糟糟的,有很多情侣都不在相邻位置。维持秩序的人同意让情侣们跟相邻的人交换位置,直到所有情侣都在2k-1和2k位置上为止。
    但是维持秩序的人很没有耐心,所以需要最少的交换次数,你能帮情侣们算出这个次数吗?

    输入描述:

    第一行一个整数n,表示一共有n对情侣,编号从1到n。同一对情侣编号相同。1<=n<=100
    第二行2n个整数ai,表示编号为ai的情侣在第i个位置。1<=ai<=n

    输出描述:

    一个整数,代表最少交换次数。
    示例1

    输入

    3
    3 3 2 2 1 1

    输出

    0

    分析:O(n^2)的复杂度
    代码1:
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        int a[2*n],mark[2*n];
        for(int i=0;i<2*n;i++)
        {
            cin>>a[i];
            mark[i]=1;
        }
        int left=0,right,count=0;
        while(left<2*n)
        {
            if(mark[left])
            {
                mark[left]=0;
                right=left+1;
                while(right<2*n&&a[right]!=a[left])
                {
                    count+=mark[right];
                    right++;
                }
                mark[right]=0;
            }
            left++;
        }
        cout<<count<<endl;
        return 0;
    }
    代码2:
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        int a[2*n],mark[2*n];
        for(int i=0;i<2*n;i++)
        {
            cin>>a[i];
            mark[i]=1;
        }
        int left,right,count=0;
        for(left=0;left<2*n;left++)
        {
            if(mark[left])
            {
                mark[left]=0;
                for(right=left+1;right<2*n&&a[right]!=a[left];right++)
                {
                    count+=mark[right];    
                } 
                mark[right]=0; 
            }
        }
        cout<<count<<endl;
    }
    
    

     ————————————————————————————————

    代码3:

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,cnt,i,j;
        cin>>n;
        int a[2*n],flag[2*n];
        for(int i=0;i<2*n;i++) 
        {
            cin>>a[i];
            flag[i]=1;
        }
        for(i=0;i<2*n;i++)
        {
            if(flag[i])
            {
                flag[i]=0;
                for(j=i+1;j<2*n && a[j]!=a[i];j++)
                {
                    cnt+=flag[j];
                }
                flag[j]=0;
            }
        }
        cout<<cnt<<endl;
    }
     
  • 相关阅读:
    .NET框架程序设计三个概念:.NET,.NET平台(PlatForm),.NET框架(Framework)
    解决AVI格式的文件不能删除的问题
    加载项目失败的解决办法
    由Codebehind所引发的
    由Duwamish学习web.config的配置
    JDK、JRE、JVM之间的关系
    hadoop等的下载地址
    eclipse代码自动补全
    UML 类图中的几种关系
    fedora 14 的163的yum源
  • 原文地址:https://www.cnblogs.com/dragondragon/p/13373379.html
Copyright © 2020-2023  润新知