1 of 16

AtCoder

ABC360

2 of 16

A - A Healthy Breakfast

高橋くんは、朝食にご飯、味噌汁、サラダを

1 皿ずつ食べます。

高橋くんの家のテーブルは細長いので、 3 皿を横一列に並べました。

並べ方は文字列

S によって与えられ、左から i 番目の皿は S I が

R ならご飯、

M なら味噌汁、

S ならサラダです。

ご飯の皿が味噌汁の皿より左にあるかどうかを判定してください。

3 of 16

4 of 16

5 of 16

s = input()

if s.index("R") < s.index("M"):

print("Yes")

else:

print("No")

6 of 16

B - Vertical Reading

英小文字からなる文字列 S と T が与えられます。

以下の条件を満たす

1 ≤ c ≤ w < ∣S∣ となる整数の組 c と w が存在するか判定してください。

ただし、

∣S∣ は文字列 S の長さを表します。

ここで、w は ∣S∣ 未満である必要があることに注意してください。

S を先頭から順に w 文字毎に区切ったとき、

長さが c 以上の文字列の c 文字目を順番に連結した文字列が T と一致する

方針

for 各w(文字づつ区切る)

for 各c文字目縦読み

7 of 16

S, T = input().split()

for w in range(1, len(S)):

 for c in range(w):

  n = 0

  msg = ""

  while (n * w + c < len(S)):

    msg += S[n * w + c]

    n += 1

   if msg == T:

    print("Yes")

    exit()

print("No")

8 of 16

C - Move It

1 から N の番号がついた N 個の

1 から N の番号がついた N 個の荷物があります。

荷物 i (1≤i≤N) は箱 A iの中にあり、重さは W i です。

あなたは荷物を一つ選び、他の箱の中に移動させる操作を

0 回以上繰り返し行うことができます。

1 回の操作で移動させる荷物の重さが w であるとき、

w のコストがかかります。

全ての箱に荷物が 1 つずつ入っている状態にするためにかかる

コストの総和の最小値を求めてください。

9 of 16

10 of 16

11 of 16

2025-04-14 21:19:31

N=int(input())

A=list(map(int,input().split()))

W=list(map(int,input().split()))

B=[0]*N  各箱に残す重さ登録

ans=0

for i,a in enumerate(A):

if B[a-1]: 初出でなければ

if B[a-1]>W[i]:

ans+=W[i] 軽いほうを解に追加

else:

ans+=B[a-1]

B[a-1]=W[i]

else:

B[a-1]=W[i]   初出ならその箱に登録

print(ans)

12 of 16

数直線上に 1 から N の番号がつけられた N 匹の蟻がいます。

蟻 i (1≤i≤N) ははじめ座標 X iにいて、正負どちらかの方向を向いています。

はじめに全ての蟻は相異なる座標にいます。各蟻が向いている方向は長さ N の 01 文字列 S で表され、

S i が 0 のとき蟻 i はの方向を向いており、 1 のとき蟻 i はの方向を向いています。

現在を時刻 0 とし、時刻 (T+0.1) までの (T+0.1) 単位時間にわたって、

N 匹の蟻がそれぞれの向いている方向に向かって単位時間あたり 1 の速さで移動します。

複数の蟻が同じ座標に到達すると、それらの蟻はすれ違い、方向や速度を変えずに通り過ぎます。

(T+0.1) 単位時間が経過したとき、すべての蟻は停止します。

1≤i<j≤N を満たし、今から時刻 (T+0.1) までに蟻 i と蟻 j がすれ違う整数の組 (i,j) の個数を

求めてください。

長さT

すれちがう

すれちがわない

13 of 16

14 of 16

li = [0, 5, 10, 15]

値の間の区間のindexを返す

関数

bisect_left(li, 3) # 1

bisect_right(li, 3) # 1

bisect_left(li, 5) # 1

bisect_right(li, 5) # 2

15 of 16

T

from bisect import bisect_left, bisect_right

n, t = map(int, input().split())

s = input()

x = list(map(int, input().split()))

toL = []

toR = []

for i in range(n):

if s[i] == ‘0’: 右行と左行に振り分け

toL.append(x[i])

else:

toR.append(x[i])

toL.sort()

result = 0

for e in toR:

result += bisect_right(toL, e + 2 * t) - bisect_left(toL, e)

print(result)

T

第5区間

第2区間

16 of 16

2025-04-05 15:59:53