zoukankan      html  css  js  c++  java
  • [SDOI2009]E&D

    Description

    小E 与小W 进行一项名为“E&D”游戏。游戏的规则如下:桌子上有2n 堆石子,编号为1..2n。其中,为了方便起见,我们将第2k-1 堆与第2k 堆(1 ≤ k ≤ n)视为同一组。第i堆的石子个数用一个正整数Si表示。一次分割操作指的是,从桌子上任取一堆石子,将其移走。然后分割它同一组的另一堆石子,从中取出若干个石子放在被移走的位置,组成新的一堆。操作完成后,所有堆的石子数必须保证大于0。显然,被分割的一堆的石子数至少要为2。两个人轮流进行分割操作。如果轮到某人进行操作时,所有堆的石子数均为1,则此时没有石子可以操作,判此人输掉比赛。小E 进行第一次分割。他想知道,是否存在某种策略使得他一定能战胜小W。因此,他求助于小F,也就是你,请你告诉他是否存在必胜策略。例如,假设初始时桌子上有4 堆石子,数量分别为1,2,3,1。小E可以选择移走第1堆,然后将第2堆分割(只能分出1 个石子)。接下来,小W 只能选择移走第4 堆,然后将第3 堆分割为1 和2。最后轮到小E,他只能移走后两堆中数量为1 的一堆,将另一堆分割为1 和1。这样,轮到小W 时,所有堆的数量均为1,则他输掉了比赛。故小E 存在必胜策略。

    Input

    的第一行是一个正整数T(T ≤ 20),表示测试数据数量。接下来有T组数据。对于每组数据,第一行是一个正整数N,表示桌子上共有N堆石子。其中,输入数据保证N是偶数。第二行有N个正整数S1..SN,分别表示每一堆的石子数。

    Output

    包含T 行。对于每组数据,如果小E 必胜,则输出一行”YES”,否则输出”NO”。

    Sample Input

    2
    4
    1 2 3 1
    6
    1 1 1 1 1 1

    Sample Output

    YES
    NO
    【数据规模和约定】
    对于20%的数据,N = 2;
    对于另外20%的数据,N ≤ 4,Si ≤ 50;
    对于100%的数据,N ≤ 2×10^4,Si ≤ 2×10^9。
    对于每一对(x,y)记忆化求出SG函数很简单
    但是Si<=10^9,所以不能直接求
    可以打表找规律,发现由很多2×2的部分结:
    构很相似
    这是9×9的表
    0 1 0 2 0 1 0 3 0
    1 1 2 2 1 1 3 3 1
    0 2 0 2 0 3 0 3 0
    2 2 2 2 3 3 3 3 2
    0 1 0 3 0 1 0 3 0
    1 1 3 3 1 1 3 3 1
    0 3 0 3 0 3 0 3 0
    3 3 3 3 3 3 3 3 4
    0 1 0 2 0 1 0 4 0
    首先发现(x,y)都是奇数时SG为0,然后
    发现一个元素可以对应一个2×2矩阵
    得出SG[x][y]=SG[(x+1)/2][(y+1)/2]+1
    有大佬用阿达马矩阵666
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 int n,ans;
     8 int getSG(int x,int y)
     9 {
    10   if (x%2==1&&y%2==1) return 0;
    11   return getSG((x+1)/2,(y+1)/2)+1;
    12 }
    13 int main()
    14 {int i,j,T,x,y;
    15   cin>>T;
    16   while (T--)
    17     {
    18       cin>>n;
    19       ans=0;
    20       for (i=1;i<=n/2;i++)
    21     scanf("%d%d",&x,&y),ans^=getSG(x,y);
    22       if (ans) printf("YES
    ");
    23       else printf("NO
    ");
    24     }
    25 }
  • 相关阅读:
    命令拷屏之网络工具
    PHP 设计模式 笔记与总结(1)命名空间 与 类的自动载入
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 计蒜客 1251 仙岛求药
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 蓝桥杯 算法训练 字符串合并
    Java实现 LeetCode 143 重排链表
    Java实现 LeetCode 143 重排链表
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8398428.html
Copyright © 2011-2022 走看看