標題:遞增三元組
給定三個整數數組
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
資源約定:
峰值內存消耗(含虛擬機) < 256M
CPU消耗 < 1000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入…” 的多余內容。
注意:
main函數需要返回0;
只使用ANSI C/ANSI C++ 標準;
不要調用依賴于編譯環境或操作系統的特殊函數。
所有依賴的函數必須明確地在源文件中 #include
不能通過工程設置而省略常用頭文件。
提交程序時,注意選擇所期望的語言類型和編譯器類型。
題目分析:
說白了也就是找,A數組中比B數組中數小的的數,并且B數組比C數組中的數小的所有組合
思路:創建一個三行的二維數組用于存放A、B、C三個數組;
三層for循環進行一一篩選判斷
代碼如下:
#include <iostream>
#include <string.h>
using namespace std;int main()
{int a[3][100000];//定義一個三行的二維數組用于存放A、B、C三個數組int counter=0;//賦值記錄總共滿足要求的組合情況memset(a,0,sizeof(a));//初始化數組全為0int N;cin>>N;for(int i=0;i<N;i++){cin>>a[0][i];}for(int i=0;i<N;i++){cin>>a[1][i];}for(int i=0;i<N;i++){cin>>a[2][i];}for(int i=0;i<N;i++){for(int j=0;j<N;j++){for(int k=0;k<N;k++){if(a[0][i]<a[1][j]&&a[1][j]<a[2][k])//查找A數組中比B數組中數小的的數,并且B數組比C數組中的數小的所有組合counter++;}}}cout<<counter;return 0;
}