当前位置: 代码迷 >> 综合 >> 题目 2194: [蓝桥杯][2018年第九届真题]递增三元组
  详细解决方案

题目 2194: [蓝桥杯][2018年第九届真题]递增三元组

热度:71   发布时间:2024-02-26 20:54:34.0

 

时间限制: 1Sec 内存限制: 128MB 提交: 1716 解决: 579

题目描述

给定三个整数数组
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。

输出

一个整数表示答案

样例输入

3
1 1 1
2 2 2
3 3 3

样例输出

27

提示

零基础的同学可以先学习基础,教程见:  C语言教程、C++教程、编译器教程、数据结构教程、Python教程、单片机教程等

视频教学见视频网课

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<set>
using namespace std;
const int inf=0x3fffffff;
const int maxn=10010;vector<int> a,b,c;int main(){int n;scanf("%d",&n);a.resize(n),b.resize(n),c.resize(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.begin(),a.end());sort(b.begin(),b.end());sort(c.begin(),c.end());int p=0,q=0;long long res=0;for(int i=0;i<n;i++){while(p<n && a[p]<b[i]) p++;while(q<n && c[q]<=b[i]) q++;  res = res + p*(n-q) ;}printf("%lld\n",res);return 0;
}

 

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<set>
using namespace std;
const int inf=0x3fffffff;
const int maxn=10010;vector<int> a,b,c ;int main(){int n;scanf("%d",&n);vector<long long> B(n,0),C(n,0);a.resize(n);for(int i=0;i<n;i++)	scanf("%d",&a[i]);b.resize(n);for(int i=0;i<n;i++){scanf("%d",&b[i]);for(int j=0;j<n;j++){if(a[j]>=b[i]) continue;
//			a[j] < b[i]B[i]++;}}c.resize(n);long long res=0;for(int i=0;i<n;i++){scanf("%d",&c[i]);for(int j=0;j<n;j++){if(b[j]>=c[i]) continue;
//			b[j] < c[i]C[i]=C[i]+B[j];}res += C[i]; }//	long long res=0;
//	for(int i=0;i<n;i++){
//			
//		 res += C[i];
//	}
//		printf("%lld\n",res);return 0;
}

30%

#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
#include<set>
using namespace std;
const int inf=0x3fffffff;
const int maxn=10010;vector<int> a,b,c;int main(){int n;scanf("%d",&n);a.resize(n);for(int i=0;i<n;i++)	scanf("%d",&a[i]);b.resize(n);for(int i=0;i<n;i++)scanf("%d",&b[i]);c.resize(n);for(int i=0;i<n;i++)	scanf("%d",&c[i]);long long res=0;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(a[i]>b[j]) continue;for(int k=0;k<n;k++){if(a[i]<b[j] && b[j]<c[k]) res++;}}}printf("%lld\n",res);return 0;
}