PAT--1044 Shopping in Mars--尺取

題目鏈接:https://pintia.cn/problem-sets/994805342720868352/problems/994805439202443264

題目大意:有n個數,求這n個數當中所有連續的和爲m的子數組,如果找不到,就重新找一個和x,使得存在子數組的和爲x,並且x要大於m。

分析:對於每個和x,直接尺取即可。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, m, cnt, a[N];
void solve() {
	int sum = 0, l = 1, r = 1;
	while(r <= n) {
		sum += a[r];
		if(sum == m) {
			cnt++;
			printf("%d-%d\n", l, r);
		} else {
			while(sum > m) {
				sum -= a[l];
				l++;
			}
			if(sum == m) {
				cnt++;
				printf("%d-%d\n", l, r);
			}
		}
		r++;
	}
}
int main() {
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	cnt = 0;
	while(cnt == 0) {
		cnt = 0;
		solve();
		m++;
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章