题目链接:Codeforces 459B Pashmak and Flowers
题目大意:找出序列中差值最大的值,并且输出有多少种选择方案。
解题思路:将数组排序,最大值减去最小值即使差值最大值,统计最大值个数和最小值个数,相乘即使答案。注意全都相同的情况,为C(2n),并且总数会爆int。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 2 * 1e5 + 5;
typedef long long ll;
int n, b[maxn];
int main () {
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &b[i]);
sort(b, b + n);
int dis = b[n-1] - b[0];
ll p = 0, q = n-1, ans;
if (dis == 0) {
ans = (ll)n * (n - 1) / 2;
} else {
while (b[p] == b[0] && p < n) p++;
while (b[q] == b[n-1] && q >= 0) q--;
ans = p * (n-1-q);
}
printf("%d %lld\n", dis, ans);
return 0;
}