藍橋杯:2018年第九屆藍橋杯省賽B組第六題—遞增三元組
阿新 • • 發佈:2018-12-21
給定三個整數陣列 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
輸入得到 a,b,c 每個數出現的個數,列出狀態轉移方程
i=100000 -> 1
a[i] = a[i]*b[i+1]+a[i+1]
b[i] = b[i]*c[i+1]+b[i+1]
c[i] = c[i]+c[i+1]
輸出 a[1]
#include<stdio.h> #include<stdlib.h> //#define HOST int main(int argc,char **argv) { #ifdef HOST freopen("input.txt","r",stdin); #endif int cnt,a[100005]={0},b[100005]={0},c[100005]={0}; scanf("%d",&cnt); int temp; for(int i=1;i<=cnt;i++) { scanf("%d",&temp); a[temp]++; } for(int i=1;i<=cnt;i++) { scanf("%d",&temp); b[temp]++; } for(int i=1;i<=cnt;i++) { scanf("%d",&temp); c[temp]++; } for(int i=100000;i>=1;i--) { a[i]=b[i+1]*a[i]+a[i+1]; b[i]=c[i+1]*b[i]+b[i+1]; c[i]+=c[i+1]; } printf("%d\n",a[1]); return EXIT_SUCCESS; }