見出し画像

[ABC266]AtCoder Beginner Contest 266 A~C問題Python解説

A問題

S = input()
print(S[len(S)//2])

Sの中心の文字を出力します。
Sの長さは奇数になると記載があるので、
例えばSの長さが3の場合は1番目
5の場合は3番目を出力します。
インデックスは0から始まるので、
文字列の長さを2で割った商が出力する文字列のインデックス番号になりますね。
文字列の長さ len(S)
2で割った商 //2
でそれぞれ求められるので、
最終的にはS[len(S)//2]を出力します。

B問題

n = int(input())
x = n%998244353
print(x)

ちょっと難しそうに書いてありますが、
ご覧のとおり、シンプルな解答です。
もとめるxは問題文から次のように書いてあります。
「N-xは998244353の倍数」

これを式に直すと、
(N-x)÷998244353 = 〇
ここまで来たら気づいた方もいるかもしれませんが、
Nを998244353で割った余りがxですね。
余りは%を使ってで出力できます。

C問題

import numpy as np 
ax, ay = map(int,input().split()))
bx, by = map(int,input().split()))
cx, cy = map(int,input().split()))
dx, dy = map(int,input().split()))

ab = [bx-ax, by-ay]
bc = [cx-bx, cy-by]
cd = [dx-cx, dy-cy]
da = [ax-dx, ay-dy]

abc = np.cross(ab, bc)
bcd = np.cross(bc, cd)
cda = np.cross(cd, da)
dab = np.cross(da, ab)
lis = [abc, bcd, cda, dab]

for i in lis:
    if i<0:
        print("No")
        exit()
print("Yes")

今度は簡単そうに見えて、難しい問題でした笑
テーマは「外積」です。
これは数学の話なので、解説は省略します。
外積は公式の方がしてくれてます。

Pythonでの外積の求め方は以下を参考にしてください。


この記事が気に入ったらサポートをしてみませんか?