题解:
此题可以直接暴力求解,(甚至可以四层循环
具体思想便是a[k]充当两种身份,同时判断两种不同情况,然后计数便可以了
/** /*@author victor /*language c++ */ #include<bits/stdc++.h> using namespace std; typedef long long ll; int a[505]; int main(){ int n; cin >> n; ll num = 0; ll sum = 0; for(int i = 1 ; i <= n ; i++) cin >> a[i]; for(int i = 1; i <= n - 3 ; i++ ) for(int j = i + 1; j <= n - 2; j++ ) if(a[i] < a[j]){ num = 0; for(int k = n; k > j ; k--){ if(a[k] > a[j]) num ++; if(a[k] < a[j] && a[k] > a[i]) sum += num; } } cout << sum << endl; return 0; }
下面给出四层循环的AC代码
/** /*@author victor /*language c++ */ #include <iostream> using namespace std; typedef long long ll; int A[501]; int main() { int n; cin>>n; for( int i = 1 ; i <= n ; i ++) { cin >> A[i]; } ll s = 0; int x = n - 3; int y = n - 2; int z = n - 1; for( int a = 1 ; a <= x ; a ++) { for(int b = a + 1 ; b <= y ; b ++) { if( A[b] <= A[a]) continue; for(int c = b + 1 ; c <= z ; c ++) { if( A[c] <= A[a] || A[c] >= A[b]) continue; for(int d = c + 1 ; d <= n ; d ++) { if( A[d] <= A[b]) continue; else s ++; } } } } cout << s ; return 0; }