题目大意:
本质就是分组,不能使每组的和等于0,问要怎么分。
题目解法:
其实就是把每个0和之后的非0数结合就好。
代码:
#include "iostream"
#include "algorithm"
#include "cstdio"
#include "math.h"
#include "string"
#include "string.h"
using namespace std;
int n, a[101], sum[101];
int st[101], ed[101];
int main()
{
while (scanf("%d", &n) != EOF) {
bool flag = true;
sum[0] = 0;
int num = 0;
for (int i = 1;i <= n;i++) {
scanf("%d", &a[i]);
if (a[i] == 0) {
if (flag) {
st[num] = i;
flag = false;
}
}
else {
if (flag) {
st[num] = ed[num] = i;
num++;
}
else {
ed[num] = i;
num++;
flag = true;
}
}
}
if (!flag&&num==0) {
puts("NO");
}
else {
puts("YES");
printf("%d\n", num);
for (int i = 0;i < num;i++) {
if (i == num - 1) {
printf("%d %d\n", st[i],n);
}
else {
printf("%d %d\n", st[i], ed[i]);
}
}
}
}
return 0;
}