BOJ 2003数量の和2
3987 ワード
https://www.acmicpc.net/problem/2003
時間0.5秒、メモリ128 MB
input : N M(1 ≤ N ≤ 10,000)(1 ≤ M ≤ 300,000,000) A[i] (1 <= A[i] <= 30000) output : 出力 条件: i 1番目の数からj番目の数の和A[i]+A[i+1]+.+A[j-1]+A[j]がMの場合の数 これも二重ポインタを利用したり、すべての和を求めたりします.
二重ポインタの場合:
startを0に設定
endを1にする
ans=0を指定し、次に.
値を保存するtempにstartのアイテムを追加します.
やるべきこと
temp == m
ans += 1
tempから一番前の値startを減算します.
スタートポイントをstart+=1で移動します.
temp < m
temp += arr[end]
end += 1
temp > m
temp -= arr[start]
start += 1
そして私が終わるとき.
この複文はstartend=nは到着したがtempはmより小さく,これはstartを移動しても値が大きくならないためbreakを掛ける必要があることを意味する.
時間0.5秒、メモリ128 MB
input :
import sys
n, m = map(int, sys.stdin.readline().split())
data = list(map(int, sys.stdin.readline().split()))
ans = 0
for i in range(0, len(data)):
total = 0
for j in range(i, len(data)):
total += data[j]
if total == m:
ans += 1
break
if total > m:
break
print(ans)
実際、まず考えられるのはいつも2層for文で繰り返されるので、上のはPypyコミットで正しいです.二重ポインタの場合:
startを0に設定
endを1にする
ans=0を指定し、次に.
値を保存するtempにstartのアイテムを追加します.
やるべきこと
temp == m
ans += 1
tempから一番前の値startを減算します.
スタートポイントをstart+=1で移動します.
temp < m
temp += arr[end]
end += 1
temp > m
temp -= arr[start]
start += 1
そして私が終わるとき.
この複文はstart
Reference
この問題について(BOJ 2003数量の和2), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-2003-수들의-합-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol