🙌

AtCoder Beginner Contest 393(2)

2025/02/18に公開

今回解けたのはここまででした。

C問題

package main

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

func main() {
	var m, n int

	fmt.Scan(&n, &m)

	c := 0

	stack := make(map[string]bool)

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

	for i := 0; i < m; i++ {
		line, _ := reader.ReadString('\n')
		line = strings.TrimSpace(line)
		parts := strings.Split(line, " ")

		v1, _ := strconv.Atoi(parts[0])
		v2, _ := strconv.Atoi(parts[1])

		if v1 == v2 {
			c++
			continue
		}

		if v1 < v2 {
			str := strconv.Itoa(v1) + "&" + strconv.Itoa(v2)
			if stack[str] {
				c++
				continue
			}
			stack[str] = true
		}
		if v1 > v2 {
			str := strconv.Itoa(v2) + "&" + strconv.Itoa(v1)
			if stack[str] {
				c++
				continue
			}
			stack[str] = true
		}
	}

	fmt.Println(c)

}

D問題

package main

import (
	"fmt"
	"math"
)

func main() {
	var n int
	var s string

	fmt.Scan(&n, &s)
	steps := minSwapsToOptimalOnes(s)

	fmt.Println(steps)

}
func minSwapsToOptimalOnes(s string) int {
	var pos []int

	for i, c := range s {
		if c == '1' {
			pos = append(pos, i)
		}
	}

	k := len(pos)    
	medianIndex := k / 2            
	medianValue := pos[medianIndex] 
	start := medianValue - (k / 2)  

	steps := 0
	for i := 0; i < k; i++ {
		steps += int(math.Abs(float64(pos[i] - (start + i))))
	}

	return steps
}

Discussion