小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2…an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
示例1
输入
6
45 12 45 32 5 6
输出
1 2
思路:分两个问题求解,首先都是将原数组排序。
然后求解差最大的对数,算出最小的数的个数和最大的数的个数,相乘以后的结果即是差最大的对数。
最后求解差最小的对数,分两种情况讨论,差最小是否为0.
如果差最小不为0,计算相邻数之间的差,统计差最小的对数。
如果差最小为0,计算原数组中重复数的个数,每一种数字重复即算一次组合数n*(n-1)/2,最后累加就是差最小的对数。
#include <iostream>
#include <algorithm>
#include <vector>