🔖

AtCoder Beginner Contest 390

2025/01/28に公開

とりあえずC問題まで。

A問題

package main

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

func main() {

	reader := bufio.NewReaderSize(os.Stdin, 1<<20)

	line, _ := reader.ReadString('\n')
	line = strings.TrimSpace(line)

	if line == "1 2 3 5 4" || line == "1 2 4 3 5" || line == "1 3 2 4 5" || line == "2 1 3 4 5" {
		fmt.Println("Yes")
	} else {
		fmt.Println("No")
	}

}

B問題

package main

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

func main() {

	var a int
	fmt.Scan(&a)

	reader := bufio.NewReaderSize(os.Stdin, 1<<20)

	line, _ := reader.ReadString('\n')
	line = strings.TrimSpace(line)
	parts := strings.Split(line, " ")

	for i := 1; i < a-1; i++ {
		g0, _ := strconv.Atoi(parts[i-1])
		geo, _ := strconv.Atoi(parts[i])
		geo2, _ := strconv.Atoi(parts[i+1])
		if geo*geo != g0*geo2 {
			fmt.Println("No")
			return
		}
	}
	fmt.Println("Yes")

}

C問題

package main

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

func main() {

	var h, w int
	fmt.Scan(&h, &w)

	var cells [][]rune

	minX := 1000
	minY := 1000
	maxX := -1
	maxY := -1

	reader := bufio.NewReaderSize(os.Stdin, 1<<20)

	for i := 0; i < h; i++ {

		line, _ := reader.ReadString('\n')
		line = strings.TrimSpace(line)
		cell := []rune(line)
		cells = append(cells, cell)

		for j := 0; j < w; j++ {
			if cell[j] == '#' {
				minX = min(minX, j)
				minY = min(minY, i)
				maxX = max(maxX, j)
				maxY = max(maxY, i)
			}
		}
	}

	for i := minY; i <= maxY; i++ {
		for j := minX; j <= maxX; j++ {
			if cells[i][j] == '.' {
				fmt.Println("No")
				return
			}
		}
	}

	fmt.Println("Yes")

}

func max(a, b int) int {
	if a > b {
		return a
	}

	return b
}

func min(a, b int) int {
	if a > b {
		return b
	}

	return a
}

reader := bufio.NewReaderSize(os.Stdin, 1<<20)をループ内で呼び出すと実行時エラーになることを学んだ。
まあそうなるよね。

Discussion