输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2...an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
6 45 12 45 32 5 6
1 2
import sys
for line in sys.stdin:
    temp = [int(i) for i in line.split()]
    if len(temp) == 1:
        # 把N跳过
        continue
    temp.sort()
    Dict = {}
    for i in temp:
        if i in Dict:
            Dict[i] += 1
        else:
            Dict[i] = 1
    res = 0
    for k in Dict.keys():
        if Dict[k] >= 2:
            temp2 = [i for i in range(Dict[k])]
            res += sum(temp2)
    if res == 0: 
        # 没重复的情况,比如[1,2,3,9]这种
        temp3 = []
        for j in range(len(temp)-1):
            temp3.append(temp[j+1] - temp[j])
        temp3.sort()
        # print()会换行,算例通不过,加了end就不会换行
        print(temp3.count(temp3[0]), end=" ")
    else:
        print(res, end=" ")
    num_max, num_min = Dict[temp[-1]], Dict[temp[0]]
    print(num_max*num_min) 我用python3,各位一定要注意print()会直接换行,算例通不过
                                                                                    import sys
def MaxAndMinPair(s):
    if len(s) <= 1:
        return 0
    s.sort(reverse=True)
    if s[0] == s[-1]:
        minPair = maxPair = int(len(s) * (len(s) - 1) / 2)
        print(str(minPair)+' '+str(maxPair))
    else:
        minGap = s[0] - s[-1]
        minPair = 1
        for i in range(len(s)-1):
            if s[i] - s[i + 1] < minGap:
                minGap = s[i] - s[i + 1]
                if minGap == 0:
                    break
                minPair = 1
                continue
            if s[i] - s[i + 1] == minGap:
                minPair += 1
        if minGap == 0:
            minPair = 0
            elementDic = {}
            for i in range(len(s)):
                if s[i] not in elementDic:
                    elementDic[s[i]] = 1
                else:
                    elementDic[s[i]] += 1
            for key in elementDic:
                num = elementDic[key]
                minPair += num*(num-1)/2
        # to find the max gap pair num
        # 2 1 1 1
        maxNum = 1
        minNum = 1
        for i in range(len(s)-1):
            if s[i] == s[i+1]:
                maxNum += 1
            else:
                break
        for i in range(len(s)-1):
            if s[len(s)-1-i] == s[len(s)-2-i]:
                minNum += 1
            else:
                break
        print(str(int(minPair)) + ' ' + str(maxNum * minNum))
if __name__ == '__main__':
    k = 0
    for line in sys.stdin:
        k = 1 - k
        if (k == 0):
            data = [int(i) for i in line.strip().split()]
            MaxAndMinPair(data) input_num = []
while True:
    try:
        num = int(input().strip())
        list_num = [int(i) for i in input().strip().split()]
        input_num.append((num,list_num))
    except EOFError:
        break
def find(numOfList,list_num):
    num = numOfList
    if num == 1:
        return 0,0
    listNum = list_num
    listNum.sort()
    amount = 0
    i = 0
    while i < num-1:    #i<num-1,
        if listNum[i] == listNum[i+1]:
            count = 1    #count记录有多少个相等的listNum[i]
            while i < num-1 and listNum[i] == listNum[i+1]:
                count += 1
                i += 1
            amount += count*(count-1)//2    #n个相同的数俩俩组合,会形成C 
        else:
            i += 1
    if amount != 0:
        numOfsmall = amount
    else:
        i = 0
        while i < num-1:
            if listNum[i+1] - listNum[i] == 1:
                amount += 1
                i += 1    #i只是+1,而不是+2的原因在于任意数字俩俩组合
            else:
                i += 1
        numOfsmall = amount
    numOfmin = 1
    i = 1
    while i < num and listNum[i] == listNum[0]:    #一定要注意范围
        numOfmin += 1
        i += 1
    numOfmax = 1
    i = num-2
    while i >= 0 and listNum[i] == listNum[-1]:    #一定要注意范围
        numOfmax += 1
        i -= 1
    numOfbig = numOfmin*numOfmax
    return numOfsmall,numOfbig
for i in input_num:
    numOfsmall,numOfbig = find(i[0],i[1])
    print(numOfsmall,numOfbig,sep=' ')
import sys def main(): k = 0 for line in sys.stdin: k = 1 - k if (k == 0): li = [int(i) for i in line.strip().split()] m = len(li) li.sort() small, big = li[0], li[m-1] smallnum, bignum, ansbig, anssmall, mincha, mincount = 1, 1, 0, 0, -1, 0 # answer big while (li[smallnum] == small): smallnum += 1 while (li[m-1-bignum] == big): bignum += 1 ansbig = smallnum * bignum #answer small for i in range(m-1): if (li[i+1] - li[i] < mincha or mincha < 0): mincha = li[i+1] - li[i] mincount = 1 elif (li[i+1] - li[i] == mincha): mincount += 1 if (mincha > 0): anssmall = mincount else: p = 0 for i in range(m-1): if (li[i+1] == li[i]): p += 1 else: if (p > 0): anssmall += p * (p + 1) / 2 p = 0 anssmall += p * (p + 1) / 2 print str(anssmall) + " " + str(ansbig) main()
def solve(n, arr): arr.sort() if arr[0] == arr[-1]: print (n*(n-1)/2), (n*(n-1)/2) return big = arr.count(arr[0]) * arr.count(arr[-1]) small_arr = [arr[i+1] - arr[i] for i in range(n-1)] small = small_arr.count(min(small_arr)) print small, big if __name__ == '__main__': while 1: try: n = input() arr = map(int, raw_input().strip().split()) if n == 1: print '1 1' continue solve(n, arr) except: break