AtCoder Beginner Contest 159

はい。
https://atcoder.jp/contests/abc159

A - The Number of Even Pairs

PyPy3

n,m=map(int,input().split())
print(n*(n-1)//2+m*(m-1)//2)

2つ選んで和が偶数なので偶数と偶数、奇数と奇数のペアの時だけ。どちらかの個数が0個のことがあっても 0*(0-1) は0なので特に何も対策する必要はないはずです。

B - String Palindrome

PyPy3

s=input()
x=len(s)
l=s[0:(x-1)//2]
r=s[(x+3)//2-1:]
print("Yes" if s==s[::-1] and l==l[::-1] and r==r[::-1] else "No")

よくわからないので全体と前半、後半の全てで回文になっているかを確認しました。

C - Maximum Volume

PyPy3

l=int(input())
print(((l/3)**2)*((l*1.0)-((l/3)*2)))

3辺の和が特定の値で直方体の体積を最大に〜だと立方体にするしかないと思います。証明はありません。

D - Banned K

PyPy3

n=int(input())
a=[int(i) for i in input().split()]
d={}
for i in a:
    if i in d:
        d[i]+=1
    else:
        d[i]=1
ans=0
for i in d:
    ans+=d[i]*(d[i]-1)//2
for i in a:
    print(ans-(d[i]*(d[i]-1))//2+((d[i]-1)*(d[i]-2)//2))

それぞれの数が何個あるか調べる、2つ選ぶ方法を数えて全部足す。数列Aを先頭から見てちょっと再計算する。
総和から該当の数の選ぶ方法を引いた後に、1個減らした場合の選ぶ方法を足しました。

E問題はあとで