https://codeforces.com/problemset/problem/459/B
题意:先求最大值和最小值的差,然后求最大值和最小值的花一共有多少种不同的匹配方法
思路:先 sort 一下,求出最小值花的个数 x,求出最大值花的个数 y,然后方法总数就为 x*y
注意这里需要特判一下最大值和最小值相同的情况 例如:1 1 1 1,此时的方法总数为 ( x*(x-1) ) /2
以下是代码实现:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e5+10;
int a[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+1+n);
long long x=0,y=0;
for(int i=1;i<=n;i++)
{
if(a[i]!=a[1]) break;
x++;
}
for(int i=n;i>=1;i--)
{
if(a[i]!=a[n]) break;
y++;
}
long long sum=x*y;
if(a[n]==a[1])
{
sum=(x*(x-1))/2;
}
cout<<a[n]-a[1]<<" "<<sum;
return 0;
}