SFPC/2021
2021 SFPC C2
열정아빠와아들
2023. 2. 10. 20:24
#include <stdio.h>
int main()
{
int p[3004] = { 0 };
int n, m, a, b, c = 0;
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%d", &p[i]);
scanf("%d %d", &a, &b);
// a번쨰 수부터 b번쨰 수까지의 합 저장
for (int i = a - 1; i < b; i++) c += p[i];
// count에 연속 부분 수열 개수를 저장
int count = 0;
// i: 연속 부분 수열의 시작 위치
for (int i = 0; i < n; i++)
{
// ans 변수에 값을 누적하여 출력 여부를 결정한다.
int ans = 0;
// j: 연속 부분 수열의 끝 위치
for (int j = i; j < n; j++)
{
// ans에 값을 누적한다.
ans += p[j];
// 연속 부분 수열 a[i..j]의 합이 n과 같음
if (ans == c)
{
// 연속 부분 수열의 개수 저장
count++;
// C1에서는 양수만 봐서 break를 하면 되지만
// C2에서는 음수까지 봐서 뒤에 값들에 정답이 있을 수 있으므로
// break를 안해준다.
// 예시 입력: p = { 0, 1, -1 }, a = 1, b = 1 일 때
// break를 안하면 정답 3이 나오지만
// break를 추가하면 오답 2가 나온다.
}
}
}
// 정답 출력
printf("%d", count);
}