HDU 5600:N bulbs

45 篇文章 0 订阅

N bulbs

 
 Accepts: 275
 
 Submissions: 1237
 Time Limit: 10000/5000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
问题描述
N个灯泡从左到右排成一排,左边的是第一个,右边的最后一个,下标从1到n。有些开着,有些关着,为了节约用电,你要关上所有灯,但是你又很懒。
刚好有个熊孩纸路过,他刚好要从第一个灯泡走去最后一个灯泡,然后离开。
熊孩子从第一个灯泡出发,每次可以往左右两个相邻的灯泡走。
但是毕竟熊孩纸,熊孩纸在离开一个灯泡之前,一定会动一下当前这个灯泡的开关,也就是开的变关,关的变开。
想问你可不可能关完所有的灯,同时熊孩纸也可以到达最后一个灯泡,然后离开。
输入描述
第一行T,表示T组数据。
接下来T组数据:
每组数据,第一行N,后面一行一个01序列,表示灯泡的初始开关状态,0表示关,1表示开。
1\leq T \leq 101T10
1\leq N \leq 10000001N1000000
输出描述
每组数据,如果可以输出"YES",否则输出"NO"。
输入样例
1
5
1 0 0 0 0
输出样例
YES
Hint
孩子的路径是:123234545
刚好除了第一盏灯,其他灯都只经过偶数次。

发现就是如果该位置是1的话,那么经过这个位置可以直接到达下一个位置。

如果该位置是0的话,想要到达下一个位置,下一个位置的值需要取反。这样一直走直到最后一个位置。

代码:

#pragma warning(disable:4996)  
#include <iostream>  
#include <algorithm>  
#include <cmath>  
#include <vector>  
#include <string>  
#include <cstring>
#include <queue>
#include <map>
using namespace std;
typedef long long ll;

#define INF 0x3fffffff

const int maxn = 1000005;

int n;
int val[maxn];

int main()
{
    //freopen("i.txt", "r", stdin);
    //freopen("o.txt", "w", stdout);

    int i, t;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &n);
        for (i = 1; i <= n; i++)
        {
            scanf("%d", &val[i]);
        }
        for (i = 1; i <= n - 1; i++)
        {
            if (val[i] == 0)
            {
                val[i + 1] = 1 - val[i + 1];
            }
            else
            {
                continue;
            }
        }
        if (val[n])
        {
            puts("YES");
        }
        else
        {
            puts("NO");
        }
    }

    //system("pause");
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值