https://codeforces.com/problemset/problem/817/B
求三元组(i,j,k)满足 ai*aj*ak是最小的数量
显然我们要排序,我们就确认了最小值是现在的a1*a2*a3
接下来,思考a1,a2,a3可不可以替换
就需要考虑a1,a2,a3之间的关系
1.a1==a2 && a2==a3
找到一直满足a3==ai 的最大索引
数量就是
2.a1==a2 && a2!=a3
只有a3可以替换
找到一直满足a3==ai 的最大索引
数量是
3.a1!=a2 && a2==a3
a2,a3都可以替换
找到一直满足a3==ai 的最大索引
数量是
4.a1!=a2 && a2!=a3
和第2个一样
cpp
// Problem: B. Makes And The Product
// Contest: Codeforces - Educational Codeforces Round 23
// URL: https://codeforces.com/problemset/problem/817/B
// Memory Limit: 256 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<algorithm>
#include<vector>
#define INF (1ll<<60)
using namespace std;
typedef long long ll;
const int N=1e5+9;
int a[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+1+n);
// a1,a2,a3 能否交换
ll index=0;
if(a[1]==a[2] && a[2]==a[3]){
for(int i=3;i<=n;i++){
if(a[i]==a[3]){
index=i;
}else{
break;
}
}
cout<<(index*(index-1)*(index-2))/(3*2)<<'\n';
}
if(a[1]==a[2] && a[2]!=a[3]){
for(int i=3;i<=n;i++){
if(a[i]==a[3]){
index=i;
}else{
break;
}
}
cout<<(index-2)<<'\n';
}
if(a[1]!=a[2] && a[2]!=a[3]){
for(int i=3;i<=n;i++){
if(a[i]==a[3]){
index=i;
}else{
break;
}
}
cout<<(index-2)<<'\n';
}
if(a[1]!=a[2] && a[2]==a[3]){
for(int i=3;i<=n;i++){
if(a[i]==a[3]){
index=i;
}else{
break;
}
}
cout<<(index-1)*(index-2)/2<<'\n';
}
return 0;
}