题目大意:
给定n个数,取出三个数是的三个数乘积最小,且满足位置关系i<j<k,问有多少种取法。
做法:
这道题水的不行,分类讨论一下就行了,唯一的坑点就在于要开long long
代码如下:
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int a[100005];
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
if (a[1]==a[2]&&a[2]==a[3]){
long long r=0;
for (int i=1;i<=n;i++) if (a[i]==a[1]) r++;
printf("%lld",r*(r-1)*(r-2)/6);
return 0;
}
if (a[1]==a[2]&&a[2]!=a[3]){
long long r=0;
for (int i=3;i<=n;i++) if (a[i]==a[3]) r++;
printf("%lld",r);
return 0;
}
if (a[1]!=a[2]&&a[2]!=a[3]){
long long r=0;
for (int i=3;i<=n;i++) if (a[i]==a[3]) r++;
printf("%lld",r);
return 0;
}
if (a[1]!=a[2]&&a[2]==a[3]){
long long r=0;
for (int i=2;i<=n;i++) if (a[i]==a[2]) r++;
printf("%lld",r*(r-1)/2);
return 0;
}
return 0;
}