JOI 2020 一次予選 第一回
JOI 2020 一次予選 第一回 C - 共通要素
この問題でGoではN, Mは使わないのですがn, mに代入しておきます。
for文でint ai, biを用いてスライスaとbにappendしていきます。
aとbのどちらでもいいのですが、どちらかをソートします。
そして、for文を二つ使ってスライスaのcnta番目とbのcntb番目が等しいかつcのa[cnta]番目が0ならばaのcnta番目を出力してbreakします。
しかし、aとbに共通の整数が2組あった場合に2回カウントされてしまいます。
そこで今回はaとbが100以下なので長さ100のスライスcをすべて0で初期化してcの一度数えた数字番目を1にします。
そうすることで、毎回プリントする前に確認するので重複がなくなります。
Sample Code
package main import ( "fmt" "sort" ) func main() { var n, m int fmt.Scan(&n, &m) var a = []int{} var b = []int{} var c = [105]int{0} for i:=0; i < n; i++ { var ai int fmt.Scan(&ai) a = append(a, ai) } for j:=0; j < m; j++ { var bi int fmt.Scan(&bi) b = append(b, bi) } sort.Sort(sort.IntSlice(a)) for cnta:=0; cnta < n; cnta++ { for cntb:=0; cntb < m; cntb++ { if a[cnta] == b[cntb] && c[a[cnta]] == 0{ fmt.Println(a[cnta]) break } } c[a[cnta]] = 1 } }