zoukankan      html  css  js  c++  java
  • 2018年第九届蓝桥杯B组(201806-----递增三元组)

    给定三个整数数组
    A = [A1, A2, … AN],
    B = [B1, B2, … BN],
    C = [C1, C2, … CN],
    请你统计有多少个三元组(i, j, k) 满足:
    1 <= i, j, k <= N
    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

    解析:先用sort函数将三组数a,b,c排好序,然后遍历b组,将a组中比b组小的记为p,c组中比b组大的记为q,最后输出p*(n-q)的结果。
    代码:
    #include
    #include
    #include
    using namespace std;
    const int maxn=10005;
    int main()
    {
    int n;
    long long ans=0;
    int a[maxn], b[maxn], c[maxn];
    cin >> n;
    for (int i = 1; i <= n; i++)
    cin >> a[i];
    for (int i= 1; i <= n; i++)
    cin >> b[i];
    for (int i = 1; i <= n; i++)
    cin >> c[i];
    sort(a, a + n);
    sort(b, b + n);
    sort(c, c + n);
    int p = 0, q = 0;
    for (int i = 1; i <= n; i++)
    {
    while (p < n&&a[p] < b[i]) p++;
    while (q < n&&b[i] < c[q]) q++;
    ans += (long long)p*(n - q);
    }
    cout << ans;
    return 0;
    }

    永远热泪盈眶。
  • 相关阅读:
    Parcel与Parcelable剖析
    Binder文集
    Charles 使用教程
    AsyncTask
    Android 编译时注解
    scanf(),gets(),getchar()
    银行家算法
    最长公共子序列(LCS)问题
    动态规划 求解数字三角形最大值
    参数 存在二维数组
  • 原文地址:https://www.cnblogs.com/2021WGF/p/14253255.html
Copyright © 2011-2022 走看看