zoukankan      html  css  js  c++  java
  • 【牛客CSP-S提高组赛前集训营1】A

    题目大意:

    题目链接:https://ac.nowcoder.com/acm/contest/1100/A

    仓鼠和兔子被禁止玩电脑,无聊的他们跑到一块空地上,空地上有许多小石子。兔子捡了很多石子,然后将石子摆成n个圈,每个圈由a[i]个石子组成。然后兔子有两根彩色笔,一支红色一支蓝色。兔子和仓鼠轮流选择一个没有上色的石子涂上颜色,兔子每次可以选择一个还未染色的石子将其染成红色,而仓鼠每次可以选择一个还未染色的石子将其染成蓝色,并且仓鼠和兔子约定,轮流染色的过程中不能出现相邻石子同色,谁不能操作他就输了。假设他们两个都使用了最优策略来玩这个游戏,并且兔子先手,最终谁会赢得游戏?


    思路:

    对于每一堆石子按顺时针编号。
    如果先手在ii涂颜色,那么后手就在i+1i+1涂颜色。如果后手不能在i+1i+1上色那么只有i+2i+2已经被后手上色的可能。但是由于后手保证一定在先手后面位置上色,所以如果i+2i+2已经被后手上色,那么i+1i+1必然已经被先手上色,那么先手就不可以在ii上色了。故先手每上一个色,后手必然也可以上色。
    所以除了在只有一个石子的情况下,先手必败。
    那么异或起来就好了。


    代码:

    #include <cstdio>
    using namespace std;
     
    const int N=1010;
    int n,T,ans,x;
     
    int main()
    {
        scanf("%d",&T);
        while (T--)
        {
            scanf("%d",&n);
            ans=0;
            for (int i=1;i<=n;i++)
            {
                scanf("%d",&x);
                ans^=(x==1);
            }
            if (ans==1) printf("rabbit
    ");
                else printf("hamster
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    双向链表循环
    双向链表的删除操作
    双向链表的插入操作
    双向链表的结构
    双向链表的删除操作
    双向链表循环
    OD使用教程17 调试篇17
    OD使用教程17 调试篇17
    双向链表的结构
    独生子女证办理
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/11998013.html
Copyright © 2011-2022 走看看