Skip to content

Commit 21add31

Browse files
authored
Merge pull request #196 from OUCC/blog/ABC435
記事作成
2 parents acf2e05 + eaecaac commit 21add31

2 files changed

Lines changed: 138 additions & 0 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"postDate": "2025-12-06T14:48:28.149Z"
3+
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
---
2+
title: ABC435感想
3+
description: ABC435の感想を書く。
4+
author: yuuma
5+
category: other
6+
tags: [advent-calendar,kyopuro]
7+
---
8+
- この記事は [OUCC Advent Calendar 2025](https://adventar.org/calendars/12077) の7日目の記事です。
9+
- ABC435に参加した感想を書きます。(~~ネタがない~~)
10+
## AtCoderとは
11+
- AtCoderはざっくりいうとプログラミングの問題を解くコンテストを開催しているサイトです。ABCはAtCoder Beginner Contestの略で、初心者向け?のコンテストです。大体毎週土曜日の21:00から開催され、制限時間は100分です。
12+
- リンク: https://atcoder.jp/
13+
14+
## A問題
15+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_a
16+
- 解法: 1~Nまでの総和を求めるので、等差数列の和の公式を使います。普通に足し算してもいいはず。
17+
- 提出コード
18+
```python
19+
N=int(input())
20+
print(N*(N+1)//2)
21+
```
22+
## B問題
23+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_b
24+
- 解法:2重ループで区間を全探索する問題です。
25+
- 提出コード
26+
```python
27+
ans=0
28+
N=int(input())
29+
A=list(map(int,input().split()))
30+
for i in range(N):
31+
for j in range(i,N):
32+
tmp=0
33+
for k in range(i,j+1):
34+
tmp+=A[k]
35+
f=True
36+
for k in range(i,j+1):
37+
if tmp%A[k]==0:
38+
f=False
39+
if f:
40+
ans+=1
41+
print(ans)
42+
```
43+
## C問題
44+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_c
45+
- 解法: 最も右に伸びるドミノだけを考えればいいです。
46+
- 提出コード
47+
```python
48+
N=int(input())
49+
A=list(map(int,input().split()))
50+
ans=0
51+
r=A[0]+1
52+
for i in range(N):
53+
if i+1<r:
54+
ans+=1
55+
r=max(r,A[i]+i+1)
56+
else:
57+
break
58+
print(ans)
59+
```
60+
## D問題
61+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_d
62+
- 解法: 辺を逆向きに考えれば黒色に到達可能かどうかをすぐに判定できます。今回はBFSを使いました。a==1の時のF[b]=Falseの判定を忘れて1回TLEしました。
63+
- 提出コード
64+
```python
65+
N,M=map(int,input().split())
66+
G=[[] for i in range(N+1)]
67+
Gr=[[] for i in range(N+1)]
68+
for i in range(M):
69+
a,b=map(int,input().split())
70+
G[a].append(b)
71+
Gr[b].append(a)
72+
Q=int(input())
73+
from collections import deque
74+
q=deque()
75+
F=[False]*(N+1)
76+
for _ in range(Q):
77+
a,b=map(int,input().split())
78+
if a==1:
79+
if F[b]==False:
80+
q.append(b)
81+
F[b]=True
82+
else:
83+
while q:
84+
p=q.popleft()
85+
for v in Gr[p]:
86+
if F[v]==True:
87+
continue
88+
else:
89+
F[v]=True
90+
q.append(v)
91+
if F[b]:
92+
print("Yes")
93+
else:
94+
print("No")
95+
```
96+
## E問題
97+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_e
98+
- 解法: **区間をsetで管理する**とかいうやつです。自分で頑張って実装しました。割愛しているSortedSetはpython使いには必須のライブラリです。詳しくは[リンク先](https://github.com/tatyam-prime/SortedSet/blob/main/SortedSet.py)を参照してください。
99+
- 提出コード
100+
```python
101+
# https://github.com/tatyam-prime/SortedSet/blob/main/SortedSet.py
102+
class SortedSet(Generic[T]):
103+
# 割愛
104+
N,Q=map(int,input().split())
105+
ans=N
106+
L=SortedSet()
107+
R=SortedSet()
108+
for i in range(Q):
109+
a,b=map(int,input().split())
110+
f1=L.index_right(b)
111+
f2=R.index(a)
112+
if f1==f2:
113+
ans=ans-b+a-1
114+
L.add(a)
115+
R.add(b)
116+
else:
117+
a,b=b,a
118+
a=max(R[f1-1],a)
119+
b=min(L[f2],b)
120+
for i in range(f2,f1):
121+
p=L.pop(f2)
122+
q=R.pop(f2)
123+
ans+=q-p+1
124+
ans=ans-a+b-1
125+
L.add(b)
126+
R.add(a)
127+
print(ans)
128+
```
129+
こっからは解けなかったんですが、問題文だけ乗せときます。
130+
## F問題
131+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_f
132+
## G問題
133+
- 問題文: https://atcoder.jp/contests/abc435/tasks/abc435_g
134+
## 最後に
135+
以上でABC435の感想を終わります。E問題まで解けてよかったです。AtCoderに興味を持ったら一度参加してみましょう!!!来週もおそらく感想記事を書くので、そちらもよろしくお願いします。

0 commit comments

Comments
 (0)