뜌릅

Subsequence (부분합) 1806번 [백준] 본문

알고리즘/PS 문제

Subsequence (부분합) 1806번 [백준]

TwoCastle9 2021. 11. 4. 01:03
반응형

부분합 문제로 point to point 개념을 사용하여 쉽게 풀어내었다.

2003번 문제와 매우 비슷한 유형이다.

 

#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define fast_io ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define rep(i, j) for(int i=0;i<j;i++)
typedef long long ll;

const int inf = 987654321;

int main() {
	fast_io;
	int n, s;
	cin >> n >> s;
	vector<int> v(n);
	for (int& x : v)cin >> x;
	int low = 0, high = 0;
	int sum = v[0];
	int length = inf;
	while (low <= high && high < n) {
		if (sum > s) {
			length = min(length, high - low + 1);
			sum -= v[low++];
			if (low > high && low < n)
			{
				high = low;
				sum = v[low];
			}
		}
		else if (sum == s) {
			length = min(length, high - low + 1);
			if (high == n - 1)break;
			sum += v[++high];
		}
		else {
			if (high == n - 1)break;
			sum += v[++high];
		}
	}
	if (length == inf)cout << 0 << endl;
	else cout << length << endl;
	return 0;
}
 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

 

 

반응형

'알고리즘 > PS 문제' 카테고리의 다른 글

비숍 1799번 [백준]  (0) 2021.12.23
외판원 순회 2098번 [백준]  (0) 2021.12.22
부분수열의 합2 1208번 [백준]  (0) 2021.11.02
음악프로그램 2623번 [백준]  (0) 2021.07.01
내려가기 2096번 [백준]  (0) 2021.06.20