The most orzed and orzing man

题目链接:http://acm.xidian.edu.cn/problem.php?id=1184

Sprague-Grundy定理:https://zhuanlan.zhihu.com/p/20611132#!

博弈论 SG函数

看到这题一脸懵逼啊,看了一下午才弄明白,是这五题最难的(但是为什么这么多人过,不科学啊)= =

Sprague-Grundy定理大致讲了这样一个东西:

对于一个满足条件的独立博弈游戏,有着必败态和必胜态,我们只需要知道当前状态是不是必胜态,就可以知道会不会赢。然而多个多个博弈游戏组成的博弈集群游戏,只知道各个游戏是否为必胜态是不行的(必胜态数大于1时,有可能胜,有可能败),因此就需要计算SG值:

对于一个必胜态,如果它只能转移到必败态,那么将其定义为一级必胜态;

如果它能转移到一级必胜态或必败态,那么将其定义为二级必胜态;

如果它能转移到一级到k级必胜态或必败态,那么将其定义为k+1级必胜态。

而多个游戏的总状态就是当前各个游戏的状态级数(必败态为零级状态)的异或值(详细证明见上面的链接)。

对于这题的单个游戏来说,当a[i]%3=0时,为必败态(零级状态),当a[i]%3=1时为一级必胜态,当a[i]%3=2时为二级必胜态,所以整个游戏群的状态为各个状态级数的异或值。

然后发现一个多星期前的cf好像有类似的博弈题 是道B题 当时游少直接跟我说怎么写 后来也没问...惭愧= =

代码如下:

 #include<cstdio>
using namespace std;
int n,t;
int main(void){
while(~scanf("%d",&n)){
int ans;
scanf("%d",&ans);
ans%=;
for(int i=;i<n;++i){
scanf("%d",&t);
t%=;
ans^=t;
}
if(ans)printf("Yes\n");
else printf("No\n");
}
}

The most orzed and orzing man的更多相关文章

  1. hdu5197 DZY Loves Orzing(FFT+分治)

    hdu5197 DZY Loves Orzing(FFT+分治) hdu 题目描述:一个n*n的矩阵里填入1~n^2的数,要求每一排从前往后能看到a[i]个数(类似于身高阻挡视线那种),求方案数. 思 ...

随机推荐

  1. Java之路(六) 局部变量作用域最小化

    将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 将局部变量的作用域最小化的方法有: 方法1:在第一次使用某个局部变量的地方进行声明. a.Java可以在任何可以出现语句 ...

  2. Python第一天 安装 shell 文件

    Python第一天  安装  shell  文件 python里面一切都是对象 object 代码缩进:建议用四个空格来缩进,不要用tab键 安装 Linux自带python,windows需要下载m ...

  3. Springmvc @CookieValue实用

    页面直接请求,  Controller代码 @RequestMapping("/testCookieValue") public String testCookieValue(@C ...

  4. saltstack布署实践 【配置文件管理-state模块】

    那如果要批量修改被管机器的某个配置文件怎么做?以下给出一个最简单案例.   先在主管机器master上查看/etc/salt/master配置文件 看到有以下几行配置文件   # file_roots ...

  5. DataFrame的构建及一些操作

    一.DataFrame构建 1.用多个列表构建 #构建DataFrame #self._stkpool_uni.codes.end_date(这些list用append填充值,保证各个list中元素个 ...

  6. 【.NET】电话号码打星号(隐藏部分)

    描述:支持多个电话: //隐藏部分内容,支持一个值有多个联系方式,用逗号隔开.//参数:value - 值,subIndex - 从第几位开始,subQty - 隐藏几位数 protected str ...

  7. 【LeetCode】23. Merge k Sorted Lists

    合并k个已合并链表. 思路:先把链表两两合并,直到合并至只有一个链表 /** * Definition for singly-linked list. * struct ListNode { * in ...

  8. Discuz! X3.2重置管理员账号

    主要是使用了Tools急诊箱.先看一下Tools急诊箱的主要功能: 多种模式在线安装Discuz!,或者重装 重置管理员账号:将把您指定的会员设置为管理员 关闭功能:一键关闭/打开 [站点|插件]的操 ...

  9. nginx https 配置

    1.创建证书并下载(下载完成后有两个文件) *.pem *.key 2.将两个文件放在linux 某个目录下 3.配置nginx的conf配置文件 server{ # https 端口默认不是80,是 ...

  10. mysql 查看数据库中所有表的记录数

    use information_schema; SELECT DISTINCT t.table_name, t.engine '表引擎', t.table_rowsFROM TABLES tWHERE ...