| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | package mainimport (	"fmt"	"math"	"sort")type ints [][2]intfunc (is ints) Len() int           { return len(is) }func (is ints) Less(i, j int) bool { return is[i][0] < is[j][0] }func (is ints) Swap(i, j int)      { is[i], is[j] = is[j], is[i] }func main() {	var N int	_, err := fmt.Scan(&N)	for err != nil {		m := make(map[int]int)		for i, v := 0, 0; i < N; i++ {			fmt.Scan(&v)			m[v]++		}		nums := make([][2]int, 0)		for k, v := range m {			nums = append(nums, [2]int{k, v})		}		sort.Sort(ints(nums))		min, minCnt := math.MaxInt32, 0		for i := range nums {			if 1 < nums[i][1] {				if 0 < min {					min = 0					minCnt = nums[i][1] * (nums[i][1] - 1) / 2				} else {					minCnt += nums[i][1] * (nums[i][1] - 1) / 2				}			} else if 0 < i {				if det := nums[i][0] - nums[i-1][0]; det < min {					min = det					minCnt = nums[i][1] * nums[i-1][1]				} else if det == min {					minCnt += nums[i][1] * nums[i-1][1]				}			}		}		var maxCnt int		l := len(nums)		if l == 1 {			maxCnt = nums[0][1] * (nums[0][1] - 1) / 2		} else {			maxCnt = nums[0][1] * nums[l-1][1]		}		fmt.Printf("%d %d\n", minCnt, maxCnt)		_, err = fmt.Scan(&N)	}}
 |