传送门
code
#include<vector>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
map<int, int> mp;
struct node{
int fi, se;
node(int f, int s){
fi = f;
se = s;
}
bool operator == (node rhs){
return fi == rhs.fi && se == rhs.se;
}
};
bool exist(vector<node> t, node tmp){
for(int i = 0; i < t.size(); ++i)
if(t[i] == tmp) return true;
return false;
}
vector<int> store;
vector<node> test;
int a[100005], n;
int main(){
while(~scanf("%d", &n)){
mp.clear();
store.clear();
test.clear();
for(int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
++mp[a[i]];
}
int maxAns, minAns = 0;
sort(a + 1, a + n + 1);
for(int i = 1; i <= n; ++i) {
store.push_back(a[i]);
}
maxAns = mp[a[1]] * mp[a[n]];
int Min = 0x7f7f7f7f;
for(int i = 1; i < store.size(); ++i){
if(store[i] - store[i - 1] < Min){
Min = store[i] - store[i - 1];
test.clear();
test.push_back(node(store[i], store[i - 1]));
}else if(store[i] - store[i - 1] == Min && !exist(test, node(store[i], store[i - 1]))){
test.push_back(node(store[i], store[i - 1]));
}
}
for(int i = 0; i < test.size(); ++i){
if(test[i].fi == test[i].se) minAns += (mp[test[i].fi] - 1) * mp[test[i].fi] / 2;
else minAns += mp[test[i].fi] * mp[test[i].se];
}
printf("%d %d\n", minAns, maxAns);
}
return 0;
}
添加笔记