久しぶりの日曜開催ということで,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問題の類題かなと思って,組み合わせを色々やってみたが,結果できなかった.
ちゃんと復習して次につなげよう.
コメント