AtCoder Beginner Contest 234の解説記事です。
ABC234 A – Weird Function
問題
問題文の要約は以下の通りです。
問題の要約
\(f(x)=x^2+2x+3\)とする。
整数 \(t\) に対して \(f(f(f(t)+t)+f(f(t)))\) を求めよ。
制約
・\(t\) は \(0\) 以上 \(10\) 以下の整数
入力
\(t\)
出力
答えを整数として出力せよ。
解説
関数f(x)
を定義を定義する。
解説
まず、関数f(x)
を定義します。\(f(x)=x^2+2x+3\) なので戻り値としてreturn x**2+2*x+3
と定義します。
# f(x)を定義
def f(x):
return x**2+2*x+3
入力 \(t\) をint
型として受け取ります。
# 入力
t=int(input())
最後に \(f(f(f(t)+t)+f(f(t)))\) を出力します。
# 出力
print(f(f(f(t)+t)+f(f(t))))
解答
# f(x)を定義
def f(x):
return x**2+2*x+3
# 入力
t=int(input())
# 出力
print(f(f(f(t)+t)+f(f(t))))
ABC234 B – Longest Segment
問題
問題文の要約は以下の通りです。
問題の要約
二次元平面上に \(N\) 個の点があり、\(i\) 個目の点の座標を \((x_i,y_i)\) とする。この中から2つの点を選ぶとき、それらを結ぶ線分の長さの最大値を求めよ。
制約
・\(2 \le N \le 100\)
・\(-1000 \le x_i,y_i \le 1000\)
・\((x_i,y_i) \ne (x_j,y_j) (i \ne j)\)
・入力はすべて整数
入力
\(N\)
\(x_1\) \(y_1\)
\(x_2\) \(y_2\)
\(\vdots\)
\(x_N\) \(y_N\)
出力
2点を結ぶ線分の長さの最大値を出力せよ。
解説
全ての線分を考え、長さが最大のものを出力する。
解説
まず、長さを求める平方根の計算にmath.sqrt
を使用するためimport math
を行います。
そして、入力 \(N\) をint
型として受け取り、答えの変数ans
を初期値0
で用意します。
# math.sqrtを使用するためmathをimport
import math
# 入力
N=int(input())
# 答えの初期値0
ans=0
次に各座標を配列で受け取ります。
# 入力(各座標)(x_i,y_i)=(XY[i][0],XY[i][1])
XY=[[0]*2 for i in range(N)]
for i in range(N):
XY[i][0],XY[i][1]=map(int,input().split())
各線分の長さを計算して、最大のものをans
とします。
各線分の長さは \(\sqrt{(x_i-x_j)^2+(y_i-y_j)^2}\) で求められます。
# 線分の長さを計算
for i in range(N):
for j in range(i+1,N):
ans=max(ans,math.sqrt((XY[i][0]-XY[j][0])**2+(XY[i][1]-XY[j][1])**2))
最後に答えを出力します。
# 答えを出力
print(ans)
解答
# math.sqrtを使用するためmathをimport
import math
# 入力
N=int(input())
# 答えの初期値0
ans=0
# 入力(各座標)(x_i,y_i)=(XY[i][0],XY[i][1])
XY=[[0]*2 for i in range(N)]
for i in range(N):
XY[i][0],XY[i][1]=map(int,input().split())
# 線分の長さを計算
for i in range(N):
for j in range(i+1,N):
ans=max(ans,math.sqrt((XY[i][0]-XY[j][0])**2+(XY[i][1]-XY[j][1])**2))
# 答えを出力
print(ans)
ABC234 C – Happy New Year!
問題
問題文の要約は以下の通りです。
問題の要約
10進法で表記したときに \(0\), \(2\) のみからなる正整数のうち、\(K\) 番目に小さいものを求めよ。
制約
・\(K\) は \(1\) 以上 \(10^{18}\) 以下の整数
入力
\(K\)
出力
答えを整数として出力せよ。
解説
条件は2進数を2と0で表現したものになります。
つまり、\(K\) を2進数に変換して1を2に置換したものが答えです。
解説
入力 \(K\) をint
型として受け取ります。
# 入力
K=int(input())
\(K\) を2進数に変換します。
# 2進数に変換
K=bin(K)
2進数からプレフィックス0b
を削除します。
# プレフィックス0bを削除
K=K[2:]
1を2に置換します。
# 1を2に置換
K=K.replace('1', '2')
最後に答えを出力します。
# 出力
print(K)
解答
# 入力
K=int(input())
# 2進数に変換
K=bin(K)
# プレフィックス0bを削除
K=K[2:]
# 1を2に置換
K=K.replace('1', '2')
# 出力
print(K)