ABC-375
A
https://atcoder.jp/contests/abc375/tasks/abc375_a
#愚直
N = int(input())S = input()
ans = 0
for i in range(N-2): if S[i]==S[i+2]=="#" and S[i+1]==".": ans += 1print(ans)
解法
で となるときにすれば題意を満たせる。
B
https://atcoder.jp/contests/abc375/tasks/abc375_b
#愚直
def distance(a,b): return ((b[0]-a[0])**2+(b[1]-a[1])**2)**0.5
N = int(input())
cp = (0,0)
ans = 0
for i in range(N): X,Y = map(int,input().split()) ans += distance(cp, (X,Y)) cp = (X,Y)ans += distance((0,0), cp)
print(ans)
解法
処置位置をにもっておき、距離を加算し位置を更新 を繰り返し、最後にに帰ってくると題意を満たせる。
C
解法
D
https://atcoder.jp/contests/abc375/tasks/abc375_b
#累積和 #文字列操作
S = Word().contentN = len(S)grid = [[0]*(N+1) for i in range(26)]
for i in range(N): for j in range(26): grid[j][i+1] = grid[j][i] + (1 if j==(ord(S[i])-NA) else 0)
ans = 0for i in range(1+1, N): for j in range(26): l = grid[j][i-1] r = grid[j][N]-grid[j][i] ans += l*r
print(ans)
解法
前提としてアルファベットは26文字であり、今回はと置く。 事前準備として、それぞれのテーブルを持って置き、で回し、文字目のときにが何文字出現しているのかを持って置く。 そして、解くフェーズに移るが、に注目したとき、となるときにすると題意を満たせる。 各文字に対して累積和の要領で各文字に対して、にはの数を、にはが入る。 したがって で解くことができ、十分に高速である。
E