您的位置:首页 > 其它

CF - 754A.Lesha and array splitting - 贪心+思维

2017-03-03 21:16 411 查看
1.题目描述:

A. Lesha and array splitting

time limit per test
2 seconds

memory limit per test
256 megabytes

input
standard input

output
standard output

One spring day on his way to university Lesha found an array A. Lesha likes to split arrays into several parts. This time Lesha decided
to split the array A into several, possibly one, new arrays so that the sum of elements in each of the new arrays is not zero. One
more condition is that if we place the new arrays one after another they will form the old array A.

Lesha is tired now so he asked you to split the array. Help Lesha!

Input

The first line contains single integer n (1 ≤ n ≤ 100) —
the number of elements in the array A.

The next line contains n integers a1, a2, ..., an ( - 103 ≤ ai ≤ 103) —
the elements of the array A.

Output

If it is not possible to split the array A and satisfy all the constraints, print single line containing "NO"
(without quotes).

Otherwise in the first line print "YES" (without quotes). In the next line print single integer k —
the number of new arrays. In each of the next k lines print two integers li and ri which
denote the subarray A[li... ri] of
the initial array A being the i-th
new array. Integers li, ri should
satisfy the following conditions:

l1 = 1

rk = n

ri + 1 = li + 1 for
each 1 ≤ i < k.

If there are multiple answers, print any of them.

Examples

input
3
1 2 -3


output
YES
2
1 2
3 3


input
8
9 -12 3 4 -4 -10 7 3


output
YES
2
1 2
3 8


input
1
0


output
NO


input
4
1 2 3 -5


output
YES
4
1 1
2 2
3 3
4 4


2.题意概述:

给你一个数组,问是否能找到元素和不为 0 的子数组。

3.解题思路:

只要原数组不全为 0 就肯定 YES 啊,然后不为 0 的元素自己就是一个(只存在一个元素)数组,碰到 0 的元素,就跟下一个不为的 0 的元素合一块作为一个数组就行了。

有些题其实想明白核心代码就几行orz

4.AC代码:

#include <stdio.h>
#define N 101
using namespace std;
int a
;
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int flag = 0, sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
sum += a[i];
if (a[i] != 0 && flag == 0)
flag = i;
}
if (flag == 0)
{
puts("NO");
continue;
}
puts("YES");
if (sum == 0)
printf("2\n%d %d\n%d %d\n", 1, flag, flag + 1, n);
else
printf("1\n%d %d\n", 1, n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 算法 codeforces