Atcoderに最近ハマっています。
Atcoderは国内最大の競技プログラミングのオンラインコンテストです。
パズル感覚で問題を解くのと、レーティングが数値で出るのが面白いですね。
期間は6ヶ月(25週間)とし、水色コーダーを目指します。
筆者の学習歴
学習歴はこんな感じです。
まだまだ入門と言う感じですね。
・利用言語はPython3
・Pythonの利用は業務で少し
・学習は「みんなのPython」を読んだくらい
・ABCコンテストには数回参加した(解けるのは1〜2問)
競プロではC++を使う方が多いかと思いますが、筆者はPythonのシンプルさに感動したためPythonで取り組みます。
今日が2022年6月11日(土)で、9月20日までの半年の期間で学習を進めます。
毎週のAtCoder Beginner Contest(ABC)をペースメーカーにしていきます。
今週学習したこと
今週からABC Problemsで過去問に取り組み始めました。
ABC ProblemsでA、B問題を中心に50問ほど解きました。
A問題はサクサクと進めるので、まずはA問題を全部解ききるように進めます。
ABC ProblemsでA、B問題を80問(A:65問、B:15問)
次の目標
前回のコンテストで茶色パフォーマンス(669)は出せました。
この調子でパフォーマンスを出せれば、あと4~5回で茶色(400)に昇級できそうです。
茶色への昇級は見えてきたので、目標を更新しました。
目標:緑色パフォーマンス(800以上)を出す
緑色パフォーマンス獲得のため、目標を整理しました。
・A・B問題を高速で解く(理想5〜10分以内)
・C・D問題をどちらかあるいは両方解く
まずはA・B問題を確実に解けるようにします。
C、D問題については簡単な場合両方、難しい場合はどちらかを解きます。
これで緑色パフォーマンスを取れる可能性があります。
今週のABC
ABCに参加してきました。
2問AC、茶色パフォーマンスを出せました。
進歩を感じられて嬉しいですね。
AC:2問
パフォーマンス:631
レーティング:221→257(+36)
段級位:9級
結果
You should output ARC, though this is ABC
2整数r,cと、2行2列の行列Aが与えられる。
Aの要素Arcを出力せよ。
行列として受け取るやり方がわからず手こずりました。
6分40秒でAC。
r,c=list(map(int,input().split()))
grid = []
for i in range(2):
array = list(map(int, input().strip().split()))
grid.append(array)
#a = [int(input().split()) for i in range(2)]
print(grid[r-1][c-1])
Light It Up
xy平面上にN人の人がいて、うちK人は明かりをもっている。
明かりが強さRの時、半径Rの円が照らされる。
N人全員が照らせれるような、最小のRを求めよ。
N人に対し、K人のうち一番近い人を選んで距離を更新します。
N,K<=1,000なので、全探索で良かったです。
10分けるほど考えてやり方が分からず断念。
(以下は後日ACしたコード)
N,K=list(map(int,input().split()))
A = list(map(int,input().split()))
xy = [map(int, input().split()) for _ in range(N)]
x, y = [list(i) for i in zip(*xy)]
cnt=[(3*10**5)**2]*N
#cnt=(3*10**5)**2
for i in range(N):
for j in A:
dis=abs((x[i]-x[j-1])**2+(y[i]-y[j-1])**2)
cnt[i]=min(cnt[i],dis)
dist=max(cnt)
print(dist**0.5)
+-1 Operation
整数Xが与えられる。
Xを+1するか-1する操作を何回か行う。
Xが初項A、公差D、項数Nの等差数列Sに含まれるようにするため、行う最小の操作の数を求めよ。
残り時間はこの問題に取り組みました。
条件を整理して答えが計算できることに気づきました。
X,A,D,N=list(map(int,input().split()))
#s = [A+D*i for i in range(N)]
L=A+D*(N-1)
#cnt=10**19
if X< A and X>L:
ans=min(abs(A-X),abs(L-X))
elif D==0:
ans=abs(A-X)
else:
ans=min(abs((X-A)%D),abs((X-A)%D-D))
print(ans)
ここは条件の整理に時間がかかり50分かけてACしました。
感想
A,C問題をACすることができました。
2ACでパフォーマンスが631だったので、少し難しめ?だったようです。
B問題は解きたかったですね。
来週学習すること
C、D問題以降も勝負できる様にするため、まずはAtCoder ProblemsでA、B問題を解ききります。
その後は、ソートやDPなど分野に絞って学習していきます。
・AtCoder Problems