传送门
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 ;
}
添加笔记