A - Lesha and array splitting

我觉得这个题最难的部分应该是理解题意。
理解了其实很简单,一个数组先判断他的和是不是0;
如果不是零,直接输出整个数组就可以了;
如果是0,判断它是全为零,还是有非零元素;
全为零肯定不行输出NO;
不全为零就找到数组的第一个不为零的数,然后将它和它之前的数划为一个子数列,之后的划为另一个子数列;

代码如下:

#include
#include
int a[105];
 int main()
 {
    int n;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        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("NO\n");
            continue;
         }
         if(sum!=0)
         {
            printf("YES\n1\n");
            printf("1 %d\n",n);
         }
         else
         {
            printf("YES\n2\n");
            printf("1 %d\n",flag);
            printf("%d %d\n",flag+1,n);
         }
    }
 }```

你可能感兴趣的:(A - Lesha and array splitting)