【AtCoder 活動記録】ABC178に参加して.~感想と解法~【python】

この記事は約3分で読めます。

久しぶりの日曜開催ということで,4大会振りに参戦した.

ほぼ毎朝(たまにサボったが),Atcoderの過去問を解いてきたので,多少はレベルアップしているかなと思いつつ,21時を迎えた.

ちなみにコンテスト参加は10回未満,色は灰です(馬鹿にしてください).

私がAtCoder(競プロ)を始めた理由と続けるメリットについて

A – Not

ただの条件分岐で解決.

s=int(input())
if s==1:
	print(0)
else:
	print(1)

B – Product Max

なんと2回WAくらった.

最初は「区間が[マイナス~マイナス],[マイナス~プラス],[プラス~プラス]の3パターンあって,それがx,yそれぞれのパターンで考えて...」とか条件分岐でいろいろやってた.

でも後々考えると「区間の端っこだけ考えればよくね??」って気づいた.

結果,[a,b]と[c,d]の全組み合わせ(4種類)の積を求めて,その最大値を解として出力.これでAC.

#入力:N,M(int:整数)
def input2():
	return map(int,input().split())
  
a,b,c,d=input2()
x=[a,b]
y=[c,d]
ans=a*c
for i in x:
	for j in y:
		if i*j > ans:
			ans=i*j
print(ans)

C – Ubiquity

ちょっと時間かかったかな.

はじめは,「$ A_i $が0~9で考えられるから,$ A_i $に当てはまるパターンは10通り.つまり全パターンは10**n.これから1~8のパターンを除いて...」と考えた.

ただ,「あ,でも9だけが数列に存在しないパターンと,0だけが数列に存在しないパターンを考慮しないと」ということに気がついた.

というわけで,計算式は

解答 =
($ A_i $が[0~9]の数列全パターン) – ($ A_i $が[0~8]の数列全パターン) – ($ A_i $が[1~9]の数列全パターン) + ($ A_i $が[1~8]の数列全パターン)

「集合の関係性とかでよく見るパターンだ」とか思いつつ,以下のコードでAC.

n=int(input())
INF=10**9+7
ans=(10**n - (9**n)*2 + 8**n)

print(ans%INF)

感想

今回はA~Cまで38分程度で解き終わった.

D問題にも挑戦してみたが,なんか試行錯誤しているうちに終わってしまった.

C問題の類題かなと思って,組み合わせを色々やってみたが,結果できなかった.

ちゃんと復習して次につなげよう.

コメント

タイトルとURLをコピーしました