3186 : 수들의 합 (두 포인터)
•시간제한: 1.000 S
•메모리제한: 256 MB
•제출: 2
•통과: 2
•만든사람: suakii
문제 설명
N개의 자연수로 이루어진 수열에서, 연속된 부분 수열의 합이 S가 되는 경우의 수를 구하세요.
두 포인터(Two Pointer) 기법: 왼쪽 포인터 L과 오른쪽 포인터 R로 현재 구간의 합을 조절합니다.
- 합 < S → R을 오른쪽으로 이동 (구간 확장)
- 합 > S → L을 오른쪽으로 이동 (구간 축소)
- 합 = S → 경우의 수 +1, 이후 L 이동 계속
[제약 조건]
• 1 ≤ N ≤ 100,000
• 1 ≤ S ≤ 1,000,000,000 (10억)
• 1 ≤ 각 자연수 ≤ 10,000
• 입력되는 모든 값은 자연수
입력 설명
첫째 줄에 N과 S가 공백으로 구분되어 주어집니다.
둘째 줄에 N개의 자연수가 공백으로 구분되어 주어집니다.
둘째 줄에 N개의 자연수가 공백으로 구분되어 주어집니다.
출력 설명
경우의 수를 출력하세요.
입력 예시
COPY
복사되었습니다!
복사되었습니다!
10 5
1 2 3 4 2 5 3 1 1 2
출력 예시
COPY
복사되었습니다!
복사되었습니다!
3
도움
(1,2,2), (5), (4,1) → 3가지