안녕 세상아,

[c++/백준] 21921 블로그 본문

백준

[c++/백준] 21921 블로그

돈 많은 백수가 되고싶다 2023. 8. 9. 14:47

https://www.acmicpc.net/problem/21921

 

21921번: 블로그

첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다

www.acmicpc.net

누적합 구하는 전형적인 문제. 

누적합 구한 후 최댓값과 같은 값을 가지는 구간의 갯수 구하면 된다. 

#include <iostream>
#include <algorithm>
using namespace std;

int arr[250001];
int sum[250001];
int maxSum[250001];
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int x, n;
	cin >> x >> n;

	int maxS = -1;
	
	//누적합 구하기
	for (int i = 1; i <= x; i++) {
		cin >> arr[i];
		sum[i] = sum[i - 1] + arr[i];
	}
	//반복문 돌리면서 해당 기간의 길이만큼 구하기
	for (int i = n; i <= x; i++) {	
		maxS = max(maxS, sum[i] - sum[i - n]);
	}
	int cnt = 0;
	if (maxS == 0) {
		cout << "SAD" << '\n';
	}
	else
	{
		cout << maxS << '\n';
		for (int i = n; i <= x; i++) {
			int maxSS = sum[i] - sum[i - n];
			if (maxSS == maxS) {
				cnt++;
			}
		}
		cout << cnt << '\n';
	}
	return 0;
}

누적합 꽤나 많이 사용하는 것 같으니까 외워둬야징

'백준' 카테고리의 다른 글

[c++/백준] 11652 카드  (0) 2023.08.28
[c++/백준] 9659 돌 게임 5  (0) 2023.08.18
[c++/백준] 11051 이항 계수 2  (0) 2023.06.28
[c++/백준] 1780 종이의 개수  (0) 2023.06.27
[c++/백준] 2630 색종이 만들기  (2) 2023.06.21