123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 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)
- }
- }
|