CF 2148E

CF 2148E

收获

  • go 中如何写while循环
package main

import "fmt"

func solve() {
    var n, k int
    var arr [200005]int
    var cnt [200005]int
    var cnt_now [200005]int
    fmt.Scan(&n, &k)
    for i := 0; i < n; i++ {
        fmt.Scan(&arr[i])
        cnt[arr[i]]++
    }

    for i := 0; i < n; i++ {
        if cnt[arr[i]]%k != 0 {
            fmt.Println(0)
            return
        }
    }

    var l, r int
    cnt_now[arr[0]]++
    ans := 1
    for r < n-1 {
        r++
        cnt_now[arr[r]]++
        if cnt_now[arr[r]] > cnt[arr[r]]/k {
            for cnt_now[arr[r]] > cnt[arr[r]]/k {
                cnt_now[arr[l]]--
                l++
            }
        }
        ans += r - l + 1
    }
    fmt.Println(ans)
}

func main() {
    var t int
    fmt.Scan(&t)
    for i := 0; i < t; i++ {
        solve()
    }
}