我是靠谱客的博主 野性康乃馨,最近开发中收集的这篇文章主要介绍A. Lesha and array splitting Codeforces Round #390 (Div. 2),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

题意:就是让这个数列分为几个小部分,每一部分相加都不为0,将每一部分的下标的最左和最右分别输出。

思路:坑死,我第一开始想着如果不是0的话就让他自己一部分,为0的话while循环找到一个不是0的和他一部分,但是还需考虑最后几个都是0,找不到不是0的数,所以就要考虑多种情况,比较复杂,实现也比较难。

其实我们只需要考虑这个数列相加等于0不?如果不等于0则让其整个一部分为一部分,如果等于0的话则让分为两部分,第一个不是0的数之前微一部分,之后又微一部分,全为0的话输出NO。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define inf 0x3f3f3f3f
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
int a[1001],b[1001];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        mem(a,0);
        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)
            printf("NOn");
        else
        {
            if(sum!=0)
            {
                printf("YESn1n1 %dn",n);
            }
            else
                printf("YESn2n1 %dn%d %dn",flag,flag+1,n);
        }

    }
}


最后

以上就是野性康乃馨为你收集整理的A. Lesha and array splitting Codeforces Round #390 (Div. 2)的全部内容,希望文章能够帮你解决A. Lesha and array splitting Codeforces Round #390 (Div. 2)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部