Zenn
📚

AtCoder Beginner Contest 399 B

2025/04/02に公開

B問題としては少し難しく感じた。

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)
	parts := strings.Split(line, " ")
	ans := make([]int, N)
	p := make([]int, N)
	r := 1
	for i := 0; i < N; i++ {
		pi, _ := strconv.ParseInt(parts[i], 10, 64)
		p[i] = int(pi)
	}

	for i := 0; i < N; i++ {
		m := max(p)
		if m == 0 {
			break
		}

		a := 0
		for j := 0; j < N; j++ {

			if p[j] == m {
				p[j] = 0
				ans[j] = r
				a++
			}
		}
		r += a
	}

	for i := 0; i < N; i++ {
		if i == N-1 {
			fmt.Print(ans[i])
		} else {
			fmt.Print(ans[i], " ")
		}
	}

}
func max(nums []int) int {
	max := nums[0]
	for _, n := range nums {
		if n > max {
			max = n
		}
	}
	return max
}

Discussion

ログインするとコメントできます