1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <stdio.h> int arr[10001] = { 0 }; int main() { int n, m; scanf("%d %d", &n, &m); getchar(); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); } int low = 0, high = 0, sum = arr[0]; int tmp = 0; while (low <= high&&high < n) { if (sum < m) { sum += arr[++high]; } else if (sum == m) { tmp++; sum += arr[++high]; } else { sum -= arr[low++]; if (low > high&&low < n) { high = low; sum = arr[low]; } } } printf("%d\n", tmp); } | cs |
'알고리즘 > 투포인터' 카테고리의 다른 글
연속적인 소수의 합 더블릿 (1644 백준) (0) | 2019.02.13 |
---|---|
1806 부분합 (더블릿 부분합) (0) | 2019.02.12 |