题目链接:http://codeforces.com/contest/754/problem/A
题意:给你一个长度为n的数组,让你把他划分成若干个任意长度的子序列,但是这个子序列的和不能为0,若不能划分就输出NO,否则输出YES,并输出子序列的区间个数,和区间
解析:一个非零数组为一个区间肯定是最方便的,然后0就跟最近的非零数抱团,所以从前往后扫,last初始为1,遇到非零数就更新为last+1,并记录答案
#include <bits/stdc++.h>
using namespace std;
const int maxn = 105;
struct node
{
int l,r;
node() {}
node(int _l,int _r)
{
l = _l;
r = _r;
}
};
int main(void)
{
int n;
scanf("%d",&n);
int last = 1;
vector<node>ans;
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
if(x)
{
ans.push_back(node(last,i));
last = i+1;
}
}
if(ans.size())
{
puts("YES");
printf("%d\n",ans.size());
for(unsigned i=0;i<ans.size()-1;i++)
printf("%d %d\n",ans[i].l,ans[i].r);
printf("%d %d\n",ans[ans.size()-1].l,n);
}
else
puts("NO");
return 0;
}