投稿日:
- この記事は OUCC Advent Calendar 2025 の7日目の記事です。
- ABC435に参加した感想を書きます。(
ネタがない)
AtCoderとは
- AtCoderはざっくりいうとプログラミングの問題を解くコンテストを開催しているサイトです。ABCはAtCoder Beginner Contestの略で、初心者向け?のコンテストです。大体毎週土曜日の21:00から開催され、制限時間は100分です。
- リンク: https://atcoder.jp/
A問題
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_a
- 解法: 1~Nまでの総和を求めるので、等差数列の和の公式を使います。普通に足し算してもいいはず。
- 提出コード
N=int(input())
print(N*(N+1)//2)
B問題
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_b
- 解法:2重ループで区間を全探索する問題です。
- 提出コード
ans=0
N=int(input())
A=list(map(int,input().split()))
for i in range(N):
for j in range(i,N):
tmp=0
for k in range(i,j+1):
tmp+=A[k]
f=True
for k in range(i,j+1):
if tmp%A[k]==0:
f=False
if f:
ans+=1
print(ans)
C問題
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_c
- 解法: 最も右に伸びるドミノだけを考えればいいです。
- 提出コード
N=int(input())
A=list(map(int,input().split()))
ans=0
r=A[0]+1
for i in range(N):
if i+1<r:
ans+=1
r=max(r,A[i]+i+1)
else:
break
print(ans)
D問題
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_d
- 解法: 辺を逆向きに考えれば黒色に到達可能かどうかをすぐに判定できます。今回はBFSを使いました。a==1の時のF[b]=Falseの判定を忘れて1回TLEしました。
- 提出コード
N,M=map(int,input().split())
G=[[] for i in range(N+1)]
Gr=[[] for i in range(N+1)]
for i in range(M):
a,b=map(int,input().split())
G[a].append(b)
Gr[b].append(a)
Q=int(input())
from collections import deque
q=deque()
F=[False]*(N+1)
for _ in range(Q):
a,b=map(int,input().split())
if a==1:
if F[b]==False:
q.append(b)
F[b]=True
else:
while q:
p=q.popleft()
for v in Gr[p]:
if F[v]==True:
continue
else:
F[v]=True
q.append(v)
if F[b]:
print("Yes")
else:
print("No")
E問題
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_e
- 解法: 区間をsetで管理するとかいうやつです。自分で頑張って実装しました。割愛しているSortedSetはpython使いには必須のライブラリです。詳しくはリンク先を参照してください。
- 提出コード
# https://github.com/tatyam-prime/SortedSet/blob/main/SortedSet.py
class SortedSet(Generic[T]):
# 割愛
N,Q=map(int,input().split())
ans=N
L=SortedSet()
R=SortedSet()
for i in range(Q):
a,b=map(int,input().split())
f1=L.index_right(b)
f2=R.index(a)
if f1==f2:
ans=ans-b+a-1
L.add(a)
R.add(b)
else:
a,b=b,a
a=max(R[f1-1],a)
b=min(L[f2],b)
for i in range(f2,f1):
p=L.pop(f2)
q=R.pop(f2)
ans+=q-p+1
ans=ans-a+b-1
L.add(b)
R.add(a)
print(ans)
こっからは解けなかったんですが、問題文だけ乗せときます。
F問題
G問題
最後に
以上でABC435の感想を終わります。E問題まで解けてよかったです。AtCoderに興味を持ったら一度参加してみましょう!!!来週もおそらく感想記事を書くので、そちらもよろしくお願いします。