BLOG

記事一覧 タグ一覧

ABC435感想

投稿日:
  • この記事は OUCC Advent Calendar 2025 の7日目の記事です。
  • ABC435に参加した感想を書きます。(ネタがない)

AtCoderとは

  • AtCoderはざっくりいうとプログラミングの問題を解くコンテストを開催しているサイトです。ABCはAtCoder Beginner Contestの略で、初心者向け?のコンテストです。大体毎週土曜日の21:00から開催され、制限時間は100分です。
  • リンク: https://atcoder.jp/

A問題

N=int(input())
print(N*(N+1)//2)

B問題

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問題

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に興味を持ったら一度参加してみましょう!!!来週もおそらく感想記事を書くので、そちらもよろしくお願いします。