zoukankan      html  css  js  c++  java
  • hihocoder 1523数据重排

    时间限制:10000ms

    单点时限:1000ms
    内存限制:256MB
    描述

    给定一个1-N的排列A1, A2, ... AN,每次操作小Hi可以选择一个数,把它放到数组的最左边。

    请计算小Hi最少进行几次操作就能使得新数组是递增排列的。

    输入

    第一行包含一个整数N。

    第二行包含N个两两不同整数A1, A2, ... AN。(1 <= Ai <= N)

    对于60%的数据 1 <= N <= 20

    对于100%的数据 1 <= N <= 100000

    输出

    一个整数代表答案

    样例输入
    5
    2 3 1 4 5
    样例输出
    1

    题解:在移动的过程要保证任意i<j,i的位置小于j的位置

    从i = n-1开始到1,和i+1比较,如果不满足移动到数组左边(下标为-)

    #include <bits/stdc++.h>
    #define maxn 100100
    using namespace std;
    int p[maxn], a[maxn];
    int main(){
        int n,wz,cnt;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            p[a[i]] = i;
        }
        wz = 0;cnt = 0;
        for(int i=n-1;i>=1;i--){
            if(p[i]>p[i+1]){
                p[i] = wz--;
                cnt++;
            }
        }
        cout<<cnt<<endl;
        return 0;
    }
  • 相关阅读:
    hiho150周
    hdu1011
    hiho1055/hdu1561
    bat脚本启动exe并打开文件后退出 + 中文乱码
    hiho1080
    hiho1079
    java异常处理——基础篇
    找不到要编译的文件——path环境变量配置
    MVC——studying
    轻松搞定EasyUI
  • 原文地址:https://www.cnblogs.com/Noevon/p/7102258.html
Copyright © 2011-2022 走看看