题目链接: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; }