CF250A Paper Work 题解

Content

有 \(n\) 个数,要分成若干堆,要求每堆中的负数最多只能有两个。试求出分成的堆数最少是多少,并求出每一堆里面的数的个数。

数据范围:\(1\leqslant n\leqslant 100,|a_i|\leqslant100\)。

Solution

这题目不算太难,我的想法是这样的:一个一个判断是不是负数,如果出现了 \(3\) 个负数,那么就把前面的所有数全部划进一堆,就可以保证堆数最少了。

Code

#include <cstdio>
using namespace std;

int n, a[107], s[107], neg;

int main() {
	scanf("%d", &n);
	s[0] = 1;
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &a[i]);
		if(a[i] < 0)	neg++;
		if(neg > 2) {
			++s[0];
			neg -= 2;
		}
		s[s[0]]++;
	}
	printf("%d\n", s[0]);
	for(int i = 1; i <= s[0]; ++i)	printf("%d ", s[i]);
}
上一篇:Matplotlib -


下一篇:ENVI中对图像监督分类结果的编辑