题目提交 题解:先排序,从小到大。b数组位于中间,先固定b数组,计算一下a数组<b数组有多少个(sa),再计算一下b数组<c数组有多少个(sc),然后累加s=sa*sc。 AC代码: #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<algorithm> using namespace std; const int maxn=100010; int a[maxn],b[maxn],c[maxn]; int main() { int n; scanf("%d",&n); int i,j,k; for(i=0; i<n; i++) scanf("%d",&a[i]); for(i=0; i<n; i++) scanf("%d",&b[i]); for(i=0; i<n; i++) scanf("%d",&c[i]); sort(a,a+n); sort(b,b+n); sort(c,c+n); int sa,sc,s=0; for(i=0; i<n; i++) { sa=0,sc=0; for(j=0; j<n; j++) if(a[j]<b[i]) sa++; for(j=0; j<n; j++) if(b[i]<c[j]) sc++; s+=sa*sc; } printf("%d\n",s); return 0; }