codeforces题目链接: https://codeforces.com/problemset/problem/15/C

CF15C Industrial Nim

题目描述

There are $ n $ stone quarries in Petrograd.

Each quarry owns $ m_{i} $ dumpers ( $ 1<=i<=n $ ). It is known that the first dumper of the $ i $ -th quarry has $ x_{i} $ stones in it, the second dumper has $ x_{i}+1 $ stones in it, the third has $ x_{i}+2 $ , and the $ m_{i} $ -th dumper (the last for the $ i $ -th quarry) has $ x_{i}+m_{i}-1 $ stones in it.

Two oligarchs play a well-known game Nim. Players take turns removing stones from dumpers. On each turn, a player can select any dumper and remove any non-zero amount of stones from it. The player who cannot take a stone loses.

Your task is to find out which oligarch will win, provided that both of them play optimally. The oligarchs asked you not to reveal their names. So, let's call the one who takes the first stone «tolik» and the other one «bolik».

输入格式

The first line of the input contains one integer number $ n $ ( $ 1<=n<=10^{5} $ ) — the amount of quarries. Then there follow $ n $ lines, each of them contains two space-separated integers $ x_{i} $ and $ m_{i} $ ( $ 1<=x_{i},m_{i}<=10^{16} $ ) — the amount of stones in the first dumper of the $ i $ -th quarry and the number of dumpers at the $ i $ -th quarry.

输出格式

Output «tolik» if the oligarch who takes a stone first wins, and «bolik» otherwise.

输入输出样例 #1

输入 #1

2
2 1
3 2

输出 #1

tolik

输入输出样例 #2

输入 #2

4
1 1
1 1
1 1
1 1

输出 #2

bolik

思路:

发现这是nim游戏的简单应用,主要难度在于找出如何简化异或运算,不暴力求解。

这道题目用到的性质是:一个偶数与比它大1的奇数的异或为1

我们先对x判断,如果x为奇数,就先异或x,然后x++,m--;

这样我们就可以方便的以当成x是偶数的情况考虑了

每当ans经过4次异或,这四次异或的值都为0,因为1与1异或为0

后面几种情况就是按照顺序往后思考即可

题解:

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
typedef unsigned long long ull;
int n;
ull m,x;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n;
ull ans=0;
for(int i=1;i<=n;i++)
{
cin>>x>>m;
if(x%2==1)
{
ans^=x;
x++;
m--;
} if(m%4==0)ans^=0;
if(m%4==1)ans^=(x+m-1);
if(m%4==2)ans^=1;
if(m%4==3)
{
ans^=1;
ans^=(x+m-1);
} // cout<<ans<<endl;
}
if(ans==0)cout<<"bolik"<<endl;
else cout<<"tolik"<<endl; return 0;
}

CF15C Industrial Nim (博弈论:nim游戏)的更多相关文章

  1. (转载)Nim博弈论

    最近补上次参加2019西安邀请赛的题,其中的E题出现了Nim博弈论,今天打算好好看看Nim博弈论,在网上看到这篇总结得超级好的博客,就转载了过来. 转载:https://www.cnblogs.com ...

  2. 51nod1069【Nim取石子游戏】

    具体看:萌新笔记之Nim取石子游戏可以这么写: #include <bits/stdc++.h> using namespace std; typedef long long LL; in ...

  3. 萌新笔记之Nim取石子游戏

    以下笔记摘自计算机丛书组合数学,机械工业出版社. Nim取石子游戏 Nim(来自德语Nimm!,意为拿取)取石子游戏. 前言: 哇咔咔,让我们来追寻娱乐数学的组合数学起源! 游戏内容: 有两个玩家面对 ...

  4. LightOJ 1253 Misere NIM(反NIM博弈)

    Alice and Bob are playing game of Misère Nim. Misère Nim is a game playing on k piles of stones, eac ...

  5. 三色抽卡游戏 博弈论nim

    你的对手太坏了!在每年的年度三色抽卡游戏锦标赛上,你的对手总是能打败你,他的秘诀是什么? 在每局三色抽卡游戏中,有n个卡组,每个卡组里所有卡片的颜色都相同,且颜色只会是红(R).绿(G).蓝(B)中的 ...

  6. [CF15C]Industrial Nim

    题目大意:有$n$个采石场,每行一个$m_i$一个$x_i$,表示第$i$个采石场有$m_i$辆车,这个采石场中车中的石子为从$x_i$开始的自然数.Nim游戏若先手赢输出"tolik&qu ...

  7. Codeforces 15C Industrial Nim 简单的游戏

    主题链接:点击打开链接 意甲冠军: 特定n 下列n行,每一行2的数量u v 表达v礧:u,u+1,u+2···u+v-1 问先手必胜还是后手必胜 思路: 首先依据Nim的博弈结论 把全部数都异或一下, ...

  8. 洛谷.2197.nim游戏(博弈论 Nim)

    题目链接 后手必胜(先手必败,P-position)当且仅当n堆石子数异或和为0. 首先0一定是P-position, 假设a1^a2^a3^...^an=K 若K!=0,则一定可以找到一个ai,ai ...

  9. 博弈论Nim取子问题,困扰千年的问题一行代码解决

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构专题26篇文章,我们来看看一个新的博弈论模型--Nim取子问题. 这个博弈问题非常古老,延续长度千年之久,一直到20世纪 ...

  10. BZOJ.1299.[LLH邀请赛]巧克力棒(博弈论 Nim)

    题目链接 \(Description\) 两人轮流走,每次可以从盒子(容量给定)中取出任意堆石子加入Nim游戏,或是拿走任意一堆中正整数个石子.无法操作的人输.10组数据. \(Solution\) ...

随机推荐

  1. JavaScript环境搭建与调试

    JavaScript的环境搭建非常简单,一个Chrome浏览器(实际上任何浏览器都自带有JavaScript解释器,Chrome对调试更友好,下载链接:http://www.51xiazai.cn/s ...

  2. B1009 说反话

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  3. WPF 使用GDI+提取图片主色调并生成Mica材质特效背景

    先看效果,在浅色模式下: 在深色模式下: P.S. 此算法只是尽可能地接近Windows Mica效果,并非实际实现:主色调提取算法只能确保在绝大多数情况下适用. 测试项目在Github上开源: Tw ...

  4. 面试题:Java中sleep和wait方法的区别

    摘要:介绍sleep方法和wait方法的相同点和区别.   在学习JAVA多线程的时候,不少人会把函数sleep和wait搞混,傻傻分不清,简单粗暴地认为都是使得线程进入等待状态,比如就分不清方法sl ...

  5. Django Web应用开发实战第十六章

    一.即时通信 - AJAX技术:通过AJAX实现网页与服务器的无刷新交互,在网页上每隔一段时间就通过AJAX从服务器中获取数据.然后将数据更新并显示在网页上,这种方法简单明了,实时性不高. - Com ...

  6. Linux下安装Flume

    摘要 flume是由cloudera软件公司产出的可分布式日志收集系统,后于2009年被捐赠了apache软件基金会,为hadoop相关组件之一.尤其近几年随着flume的不断被完善以及升级版本的逐一 ...

  7. 数据分析必备:GPS轨迹、软件签到、手机信令数据获取方式合集

      本文对目前主要的出租车.公交车.行人GPS轨迹.社交软件签到.手机信令等数据产品的获取网站加以整理与介绍. 目录 6 GPS轨迹与签到数据 6.1 个人GPS轨迹数据 6.1.1 GeoLife ...

  8. linux系统自定义登录提示信息

    centos7配置说明 这里对于centos7.x系统,可以直接编辑/etc/motd文件,增加定制的提示信息,并可以通过不同颜色展示. vim /etc/motd ^[[32m 设备IP地址: 10 ...

  9. Etcd异地容灾方案

    一.方案选型 ETCD官网提供了一种实时镜像同步数据的工具mirror-maker,如果出现主机房服务挂掉可以通过切换域名的形式切换到灾备机房,这个过程数据是可以保持一致的. 注意:make-mirr ...

  10. Spring注解中@Resource和@Authwired的区别

    Spring注解中@Resource和@Authwired的区别 @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 by ...