🙌
AtCoder Beginner Contest 393(2)
今回解けたのはここまででした。
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