|
@@ -0,0 +1,57 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "math"
|
|
|
+ "sort"
|
|
|
+)
|
|
|
+
|
|
|
+type ints [][2]int
|
|
|
+
|
|
|
+func (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)
|
|
|
+ }
|
|
|
+}
|