杭电-5560-思维

/*
解题思路:
因为只有 0 和 1 ,我们可以发现 1 只要过一次就可以了,但是 0 需要过两次,需要过两次肯定就需要边上                     的来帮助。
1、比如1 0  0,num[0] = 1,走过去就不用管了,当走到num[1]=0;时会把num[1]=1;,我们需要 num[2]=0;的帮助 ,通过           num[2]=0;我们可以把num[1]=0;这是后num[2]=1;显然num[2]=1;时最后一个,没有人可以帮助他,所以失败。
2、比如1 0 0 0比上面多一个 0 ,也就是num[3]=0; 这时候num[3]可以帮助nun[2],而且是可以成功的
3、比如1 0 0 1比上面多一个 1 ,也就是num[3]=1; 这时候num[3]可以帮助num[2],但是num[3],自己有需要帮忙,最终失败


不难看出,我们可以把这一串分成几部分来处理,如1 0 1 0 1 1 0 1 0
划分标准就是到目前为止,都可以关灯,下一个是 0 出现时,前面就是一部分,关灯方法就是上面所讲的
第一部分 1
第二部分 0 1 0  1 1
第三部分0 1 0
表达能力有限,多包涵*/
#include<stdio.h>
#include<iostream>
#include<string.h>
#define MAX 1000005
using namespace std;
int num[MAX];
int main()
{
        int T,n;
        int i,j,k,p;
        scanf ("%d",&T);
        while (T--)
        {
                scanf ("%d",&n);
                for (i=0; i<n; i++)
                        scanf ("%d",&num[i]);
                p=1;
                for (i=0; i<n; i++)
                {
                        if (i==(n-1) && num[i]==0)
                        {
                                p=0; break;
                        }
                        if (num[i]==1) continue ;
                         else
                        {
                                for (i=i+1; i<n; i++ )//这是一组
                                {
                                        if (num[i]==0)//最后一个为 0,失败
                                                break;
                                        if(i==(n-1))//最后一个为 1 ,失败
                                        {
                                                p=0;
                                                break;
                                        }
                                }
                        }
                }


                if (p==1) printf("YES\n");
                else printf("NO\n");
        }
        return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值