/*
解题思路:
因为只有 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 和 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;
}