Port 53

明日のための技術メモ

AtCoder ABC159

AtCoder ABC159解いた分だけまとめ。
またやらかしてレート大爆死。27戻ってしまった。
B問題で無駄に考えすぎてしまい、ACの2完。
Bだけは後でやり直したものを掲載。

目次

A. The Number of Even Pairs

問題文 f:id:saturn-glave:20200322232950p:plain

2つの整数を足してその和が偶数になるのは、偶数同士か奇数同士を足したときだけ。
なので、偶数同士・奇数同士の組み合わせの和が答えになる。

ACしたコード

#coding:utf-8
n, m = map(int, input().split())

print((n*(n-1))//2 + (m*(m-1))//2)

B. String Palindrome

問題文 f:id:saturn-glave:20200322233247p:plain

ここは解説AC。回文判定でスライスを使っていたが、逆順表示で無駄に位置調整をして爆死。
文字数が偶数と奇数の時で器用に分けようとしてたけど、そんなの関係なかった。
単純に検証する文字をひっくり返して一致するか確認するだけで十分いけるじゃん...考えすぎ...

ポイント

1. 回文判定をする時

検証対象の文字とそれをひっくり返した文字が一致するかを確認するだけ

2. スライスした文字の反転

取り出した文字列の後ろに [::-1]をつけるだけ。

s = saturn
print(s[1:4][::-1])
# 結果: uta

ACしたコード(解説AC)

#coding:utf-8
s = input()
n = len(s)

m = (n-1)//2
k = (n+3)//2

#検査する文字列と、それをそのまま反転したものを比較し一致すれば回文
if s == s[::-1] and s[:m] == s[:m][::-1] and s[k-1:] == s[k-1:][::-1]:
    print('Yes')
else:
    print('No')

C. Maximum Volume

問題文 f:id:saturn-glave:20200322234409p:plain

立方体の時最大になるので、それを計算して終了。
直感で判断してしまったのであまりよろしくない。
詳しい証明は相加相乗平均の不等式で示せる。(解説PDFより)

ACしたコード

#coding:utf-8
l = int(input())
n = l / 3
print(n*n*n)