👋

AtCoder Beginner Contest 392 (3)

2025/02/12に公開

C問題

ゼッケンiを付けている人の見ている人のつけているゼッケンの番号を出力する問題でした。頭の体操としてちょうどよいと思いました。

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {

	var n int
	fmt.Scan(&n)

	reader := bufio.NewReaderSize(os.Stdin, 1<<20)
	line, _ := reader.ReadString('\n')
	line = strings.TrimSpace(line)
	s := strings.Split(line, " ")
	p := make(map[int]int, n+1)
	for i := 1; i <= n; i++ {
		si, _ := strconv.Atoi(s[i-1])
		p[i] = si
	}

	line, _ = reader.ReadString('\n')
	line = strings.TrimSpace(line)
	s = strings.Split(line, " ")
	q := make(map[int]int, n+1)
	qp := make(map[int]int, n+1)
	for i := 1; i <= n; i++ {
		si, _ := strconv.Atoi(s[i-1])
		q[i] = si
		qp[si] = i
	}
	for i := 1; i <= n; i++ {
		if i == 1 {
			fmt.Print(q[p[qp[i]]])
		} else {
			fmt.Print(" ")
			fmt.Print(q[p[qp[i]]])
		}
	}

}

Discussion