【Go言語】AtCoder ABC174 復習(問題A~問題D)

投稿者: | 2020年8月2日

みなさんこんにちは、ほむほむです。
今回はAtCoder Beginner Contest 173の問題A~問題Dまでの復習投稿です。

【問題A】
あなたは、室温が30度以上のとき、またそのときに限り、冷房の電源を入れます。今の室温はX度です。冷房の電源を入れますか?という問題です。
シンプルにXが30以上であるかどうか、条件分岐を行えば良いです。

package main

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

func main() {
	X := getStdinInt()
	if X >= 30 {
		fmt.Printf("Yes\n")
		return
	}
	fmt.Printf("No\n")
}

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*10)

func getStdin() string {
	return readLine()
}
func getStdinInt() int {
	str := getStdin()
	rtn, _ := strconv.Atoi(str)
	return rtn
}
func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, _ := sc.ReadLine()
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}

【問題B】
2次元平面上にN個の点があります。i個目の点の座標は(X_i, Y_i)です。
これらのうち、原点からの距離がD以下であるような点は何個ありますか?
なお、座標(p, q)にある点と原点の距離は $$ \sqrt{p^2+q^2} $$ で表されます。

この問題は、各(X_i, Y_i)の座標が問題文の式より原点との距離がD以下であるものをシンプルに数え上げれば十分間に合います。

package main

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

func main() {
	N, D := getStdinInt2()
	ans := 0
	for i := 0; i < N; i++ {
		X, Y := getStdinInt2()
		if dis(X, Y) <= float64(D) {
			ans++
		}
	}
	fmt.Printf("%d\n", ans)
}

func dis(x, y int) float64 {
	return math.Sqrt((float64)(x*x + y*y))
}

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*10)

func getStdin() string {
	return readLine()
}
func getStdinInt() int {
	str := getStdin()
	rtn, _ := strconv.Atoi(str)
	return rtn
}
func getStdinInt2() (int, int) {
	list := getStdinIntArr()
	return list[0], list[1]
}
func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, _ := sc.ReadLine()
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}

【問題C】
後ほど更新します。

package main

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

func main() {
	K := getStdinInt64()
	var i int64 = 0
	var temp int64 = 0
	for i = 0; i < 1000000; i++ {
		temp = (temp*10 + 7) % K
		if temp == 0 {
			fmt.Printf("%d\n", i+1)
			return
		}
	}
	fmt.Printf("%d\n", -1)
}

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*10)

func getStdin() string {
	return readLine()
}
func getStdinInt64() int64 {
	str := getStdin()
	rtn, _ := strconv.ParseInt(str, 10, 64)
	return rtn
}
func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, _ := sc.ReadLine()
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}

【問題D】
後ほど更新します。

package main

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

func main() {
	N := getStdinInt()
	c := getStdin()

	ridx := N - 1
	widx := 0
	cnt := 0
	for i := 0; widx < N && ridx >= 0; i++ {
		if widx > ridx {
			break
		}

		w := -1
		if c[widx] == 'W' {
			w = widx
		} else {
			widx++
		}

		r := -1
		if c[ridx] == 'R' {
			r = ridx
		} else {
			ridx--
		}

		if r != -1 && w != -1 {
			widx++
			ridx--
			cnt++
		}
	}

	fmt.Printf("%d\n", cnt)
}

var sc = bufio.NewReaderSize(os.Stdin, 1024*1024*10)

func getStdin() string {
	return readLine()
}
func getStdinInt() int {
	str := getStdin()
	rtn, _ := strconv.Atoi(str)
	return rtn
}
func readLine() string {
	buf := make([]byte, 0, 0)
	for {
		l, p, _ := sc.ReadLine()
		buf = append(buf, l...)
		if !p {
			break
		}
	}
	return string(buf)
}

【Go言語】AtCoder ABC174 復習(問題A~問題D)」への2件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください