package main import . "fmt" func main() { var n int Scan(&n) sc := make([]int, 3) for i := 0; i < n; i++ { var s int Scan(&s) sc[s]++ } tc := make([]int, 3) for i := 0; i < n; i++ { var t int Scan(&t) tc[t]++ } switch { case sc[2] > 0 && tc[2] > 0: Println(n*(sc[2]+tc[2])-sc[2]*tc[2]) case sc[2] > 0: Println(n*sc[2]+sc[1]) case tc[2] > 0: Println(n*tc[2]+tc[1]) default: Println(max(sc[1],tc[1])) } } /* 考察 Si=0となっているi行目は論理和0なので全部0 Si=2となっているi行目は論理積1なので全部1 Tj=0となっているj列目は論理和0なので全部0 Tj=2となっているj列目は論理積1なので全部1 Si=1がある場合 ・Tjに2があるなら条件をすでに満たしている ・Tjに2がない場合はTj=1のとこと適当に ・Tjに1も2もないケースは矛盾するので存在しない Tj=1がある場合 ・Siに2があるなら条件をすでに満たしている ・Siに2がない場合はSi=1のとこと適当に ・Siに1も2もないケースは矛盾するので存在しない Si,Tjのどちらにも2が存在する場合  N * (count2(S) + count2(T)) - count2(S) * count2(T)  が答え Siにのみ2が存在する場合  N * count2(S) + count1(S)  が答え Tjにのみ2が存在する場合 N * count2(T) + count1(T) が答え Si,Tjどちらにも2が存在しない場合  max(count1(S), count1(T))  が答え 貪欲にペアを作っていくとmin(count1(S),count1(T))ができて Si,Tjが1でペアを作れてないとこはテキトーなとこを1に変更してけばいい */