2003年2月



質問リンク

コードの説明


ピッチャーを練習するために代表的な基準で概念を再確立した.
2つのポインタ(左、右)、int cnt(部分集計カウント用)、int sum(部分集計用)を使用します.
条件文として考えなければならないのは
-> 1. 現在の部分とターゲット値またはright==要素より大きい個数の場合、leftを++に設定します.
-> 2. またはright++
-> 3. 現在の部分とターゲット値が等しい場合、結果count++
すなわち,無条件に左と右を増やす過程で,部分の和がちょうど目標値である場合のcountを算出する.
また,while文におけるif文の順序も考慮する.

ソースコード

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int N, M;
vector<int> a;
int main() {
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		int abc;
		cin >> abc;
		a.push_back(abc);
	}

	int left = 0;
	int right = 0;
	int sum = 0;
	int cnt = 0;
	while (1) {
		if (sum >= M) {
			sum -= a[left++];
		}
		else if (right == N) {
			break;
		}
		else {
			sum += a[right++];
		}

		if (sum == M) cnt++;
	}

	cout << cnt;
	return 0;
}