• 2018年第九届蓝桥杯省赛 递增三元组



    标题:递增三元组

    给定三个整数数组
    A = [A1, A2, ... AN], 
    B = [B1, B2, ... BN], 
    C = [C1, C2, ... CN],
    请你统计有多少个三元组(i, j, k) 满足:
    1. 1 <= i, j, k <= N  
    2. Ai < Bj < Ck  

    【输入格式】 
    第一行包含一个整数N。
    第二行包含N个整数A1, A2, ... AN。
    第三行包含N个整数B1, B2, ... BN。
    第四行包含N个整数C1, C2, ... CN。

    对于30%的数据,1 <= N <= 100  
    对于60%的数据,1 <= N <= 1000 
    对于100%的数据,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000 

    【输出格式】
    一个整数表示答案

    【样例输入】
    3
    1 1 1
    2 2 2
    3 3 3

    【样例输出】
    27 


    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗  < 1000ms


    请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

    注意:
    main函数需要返回0;
    只使用ANSI C/ANSI C++ 标准;
    不要调用依赖于编译环境或操作系统的特殊函数。
    所有依赖的函数必须明确地在源文件中 #include <xxx>
    不能通过工程设置而省略常用头文件。

    题解:对b数组进行分析,结果就是累计b数组中每一个数对应的(a数组中小于该数的个数×c数组中大于该数的个数);

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[100011],b[100011],c[100011],bb[100011];
    int main()
    {
            int n;
            scanf("%d",&n);
            for(int i=0;i<n;i++)
                    scanf("%d",&a[i]);
            for(int i=0;i<n;i++)
                    scanf("%d",&b[i]);
            for(int i=0;i<n;i++)
                    scanf("%d",&c[i]);
            sort(a,a+n);
            sort(b,b+n);
            sort(c,c+n);
            int x=n-1,y=n-1;
            while(x>=0&&y>=0){
                    if(b[y]>a[x])
                            bb[y]=x+1,y--;
                    //因为是从后向前,所以b[y]大于a[x]就是b[y]大于a[x]以及前面所有数
                    else
                            x--;
            }
            int ans=0;
            x=y=0;
            while(x<n&&y<n){
                    if(b[y]<c[x])
                            ans=ans+bb[y]*(n-x),y++;
                    //从前往后,所以b[y]小于c[x]就代表b[y]小于c[x]以及后面所有数
                    else
                            x++;
            }
            printf("%d
    ",ans);
            return 0;
    }
  • 相关阅读:
    React性能优化 渲染20000多条checkbox组件,点击选择checkbox组件的时候特别卡,解决办法
    react网页多语言(react-intl-universal)
    个人作品
    程序员和产品经理的那些事
    three.js 根据不同的图片做不同的动画特效 科技感十足
    互联网行业最佳产品开发流程 推荐!
    类似于YouTube、Medium、知乎等网站使用的进度条插件 NProgress
    js模拟点击下载文件到本地
    MySQL记录操作(增删改)
    MySQL表的操作
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10704487.html
Copyright © 2020-2023  润新知