把<x, y>转化为"x y"装进一个slice里,使用双个map分别来记录以前slice连续的字符串的数目和当前slice中的字符串,随后对两个map进行处理。

package main

import "fmt"

var res int

func main() {
    var n int
    var m int
    var num int
    var a string
    var b string
    var ls1 []string
    var str string
    res = 0
    fmt.Scanln(&n)
    for i := 0; i < n; i++ {
        fmt.Scanln(&m)
        m1 := make(map[string]int)
        m2 := make(map[string]int)
        for j := 0; j < m; j++ {
            fmt.Scan(&num)
            for k := 0; k < num; k++ {
                fmt.Scan(&a, &b)
                str = a+" "+b
                ls1 = append(ls1, str)
                m2[str] ++
                str = ""
            }
            m1, m2 = handle(m1, m2)
            ls1 = nil
        }
        
        ans := max(m1)
        if ans > res {
            res= ans
        }
        if res < 2 {
            fmt.Println(1)
        } else {
            fmt.Println(res)
        }
        res = 0
    }
}

func handle(m1 map[string]int, m2 map[string]int) (map[string]int, map[string]int) {
    f:
        for k1 := range m1 {
            for k2 := range m2 {
                if k1 == k2 {
                    delete(m2, k2)
                    m1[k1]++
                    continue f
                }
            }
            if m1[k1] > res {
                res = m1[k1]
            }
            delete(m1, k1)
        }
    for k := range m2 {
        delete(m2, k)
        m1[k]++
    }
    return m1, m2
}

func max(m map[string]int) int {
    var ans int
    for k := range m {
        if m[k] > ans {
            ans = m[k]
        }
    }
    return ans
}