zoukankan      html  css  js  c++  java
  • HDU 1394

    题意:给定一串数字的个数n,输入这串数字(每个数字都是从0到n-1不重复)。每次可以把这串数字的前边几个数平移到末尾。问所有情况下此串最少存在多少对逆序数。

    做线段树专题的时候找到这道题。一开始各种不懂(屌丝第一次明白什么是逆序数)。后来看了大神的博客之后明白了怎么搞平移。但是最终还是决定写暴力了。

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int min(int a,int b)
    {
        if(a<b)
            return a;
        return b;
    }
    int main()
    {
        int tmp[5005],sum,n,i,j,ans;
        while(scanf("%d",&n)!=EOF)
        {
            sum=0;
            for(i=0;i<n;i++)
            {
                scanf("%d",&tmp[i]);
                tmp[i]++;
                for(j=0;j<i;j++)
                {
                    if(tmp[j]>tmp[i])
                        sum++;
                }
            }
            ans=sum;
            for(i=0;i<n;i++)
            {
                sum+=(n-tmp[i]);//每次平移增加的对数
                sum-=(tmp[i]-1);//减小的对数
                ans=min(sum,ans);?//取最小值
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    无锁编程(五)
    Linux Kernel CMPXCHG函数分析
    无锁编程(四)
    无锁编程(三)
    无锁编程(二)
    无锁编程(一)
    无锁编程
    Linux同步机制
    Linux同步机制
    bootstrap css编码规范
  • 原文地址:https://www.cnblogs.com/tun117/p/4523974.html
Copyright © 2011-2022 走看看