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 } }
JOI 2020 一次予選 第一回
JOI 2020 一次予選 第一回 B - JOIソート
初めにfor文でSの中にあるJとOとIの文字の個数を調べる。
そして、その個数の分だけJとOとIを出力する。
ただし、JとOが0個の時にIが1個出力されないため最後にJとOが0個かつIが0個でないときにIを一回だけ出力するようにする。
Sample Code
package main import ( "fmt" "strings" ) func main() { var n int var s string fmt.Scan(&n, &s) for j:=strings.Count(s, "J"); i > 0; i-- { fmt.Printf("%s", "J") } for o:=strings.Count(s, "O"); o > 0; o-- { fmt.Printf("%s", "O") } for i:=strings.Count(s, "I"); i > 0; i-- { fmt.Printf("%s", "I") } if strings.Count(s, "J") == 0 && strings.Count(s, "O") == 0 && strings.Count(s, "I") != 0{ fmt.Printf("%s\n", "I") } }
JOI 2020 一次予選 第一回
JOI 2020 一次予選 第一回 A - 2 番目に大きい整数
まず初めに、listというスライスに数字を代入していく。
そして、二番目に大きい数を出力する必要があるので、listにソートをかけて2番目の数を出力する。
Sample Code
package main import ( "fmt" "sort" ) func main() { var list = []int{} for i:=0; i < 3; i++ { var input int fmt.Scan(&input) list = append(list, input) } sort.Sort(sort.IntSlice(list)) fmt.Println(list[1]) }