标签:iostream 解题思路 code stream 大于 统计 style 输入格式 数组
给定三个整数数组 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
常规解题思路:可以先对三个数组排序,然后遍历数组b,查找a数组中有多少个小于b[i]的,c数组中有多少个大于b[i]的
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 100005; int a[MAXN],b[MAXN],c[MAXN]; int n,sum; int main() { 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); sum = 0; for(int i = 0 ;i < n; i++){ int x = (lower_bound(a,a+n,b[i]) - a); int y = (n - (upper_bound(c,c+n,b[i]) - c));//这里的这两个函数那位博主用的很好 sum += x*y; } printf("%d\n",sum); return 0; }
标签:iostream 解题思路 code stream 大于 统计 style 输入格式 数组
原文地址:https://www.cnblogs.com/wizarderror/p/10572867.html