codeforces 817B

来源:互联网 发布:淘宝上的被子是真的吗 编辑:程序博客网 时间:2024/05/04 02:46

题目大意:

给定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;}


原创粉丝点击