zoukankan      html  css  js  c++  java
  • 187A Permutations

    这道题和“扑克牌排序”很相似,但是并不是排成升序,可以用同一种方式对两个序列排序,使第二个为升序,此时第一个序列就成了“扑克牌排序”的情况,只需要统计出第一次逆序出现的位置即可,由于是排列,可以用 O(n) 的方法来做;

    # include <cstdio>
    
    # define N 200010
    
    int n, a[N], b[N];
    int p[N];
    
    void init(void)
    {
        scanf("%d", &n);
        for (int i = 1; i <= n; ++i)
            scanf("%d", &a[i]);
        for (int i = 1; i <= n; ++i)
        {
            scanf("%d", &b[i]);
            p[b[i]] = i;
        }
    }
    
    void solve(void)
    {
        int i;
    
        for (i = 1; i < n; ++i)
        {
            if (p[a[i]] > p[a[i+1]]) break;
        }
        printf("%d\n", n-i);
    }
    
    int main()
    {
     //   freopen("in.txt", "r", stdin);
    
        init();
        solve();
    
        return 0;
    }
  • 相关阅读:
    TinyOS在ubuntu 14.04下安装教程
    C++ STL标准入门
    C++ 模板
    多态
    C++继承
    C++类型转换 -- 由其他类型转换到自定义类型
    运算符重载
    友元
    typedef用法
    c++细节--section1
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2590976.html
Copyright © 2011-2022 走看看