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. ZeRO:一种去除冗余的数据并行方案

    ZeRO:一种去除冗余的数据并行方案 目前训练超大规模语言模型主要有两条技术路线: TPU + XLA + TensorFlow/JAX GPU + Pytorch + Megatron + Deep ...

  2. WPF在Visual studio中打包,发布注意事项

    右键项目,发布的时候,需要选择独立,否则依赖库的话,有可能客户端没有.net core或.net framework,那么就会报错,提醒对方下载. 今天发现,VS 2022,直接Debug运行后,Re ...

  3. 结合pandas,sqlite3批量将csv数据导入sqlite数据库

    import sqlite3 import pandas as pd conn=sqlite3.connect(r'demo.db') c=conn.cursor() 创建新表 c.execute(& ...

  4. MSDN I tell you下载方式

    1.复制下载链接 2. 去下载软件粘贴即可 下以百度网盘为例:

  5. 一个 Bean 就这样走完了它的一生之 Bean 的出生

    生命周期流程 Spring 中的一个 Bean 从被创建到被销毁,需要经历很多个阶段的生命周期,下图是一个 Bean 从创建到销毁的生命周期流程: 在 Bean 的各个生命周期流程点,Spring 都 ...

  6. 精选 12 款开源、免费、美观的 Vue 后台管理系统模板!

    前言 在当前软件开发领域,Vue.js 凭借其高效.灵活和易于上手的特性,成为了前端开发的热门选择.对于需要快速搭建企业级后台管理系统的开发者而言,使用现成的 Vue 后台管理系统模板无疑是一个明智之 ...

  7. 把数据库表的信息添加到list集合里面

    把数据库表里面的信息添加到集合里面并且打印出来: 数据库表的内容:  java代码逻辑处理: 1 public static void main(String[] args) { 2 3 Connec ...

  8. ChatMoney能根据剪纸来进行AI绘画,你见过吗?

    本文由 ChatMoney团队出品 剪纸,听起来就很有画面感,承载着中国几千年的文化.一把剪刀.一张红纸,轻轻剪几剪,就能幻化出各种栩栩如生的图案.这门艺术不仅仅是视觉上的享受,更是一种感情的传递,一 ...

  9. Error: Activity class MainActivity does not exist.

    这是一个熟悉而又陌生的错误,当年做的第一个React-Native项目就有这个错误,一直没有解决,今天又出现了,原因是我改了项目文件夹的名称,用Android Studio重新打开之后,就又出现了这个 ...

  10. 【闲话 No.3】 并查集相关

    命に嫌われている. 小唐话 感觉有的时候已经无法与人正常交流,净做唐事.说些唐话了.或许是我无法准确猜到别人喜欢什么吧. 不过还是自己心底一点 joker 之心/私心作祟吧. 感觉我有时做的唐事真的挺 ...