ARC072 D Alice&Brown 博弈论
题解:
题目大意:有2堆石子数分别为x, y的石子,你每次可以从中间的某一堆中取出2i个石子,扔掉i个,并把剩下的i个放到另一堆,无法操作的人就输了。
现在给定x,y,判断先手必赢还是先手必输。
表示这题推出了一个性质,,,然后,,,就没有然后了。
看题解还是比较妙的。
结论:如果$|x - y| <= 1$那么后手必赢,反之先手必赢。
证明:
假设现在有$|x - y| \le 1$,我们不妨设$x > y$,那么$y = x - k$.所以如果我们从x中拿出2i个石子,那么x,y将变为:
$x' = x - 2i$ $y' = x - k + i$
这时我们可以发现$y' - x' = -k + 3i$,因为i是非负的,而k因为$|x - y| \le 1$,所以$k \le 1$,所以3i的大小至少为3,而k最大为1,所以$y' - x'$至少为2,那么这个时候后手一定可以移动。
现在来考虑后手怎么动:
首先我们可以推出一个性质,当一开始的石子数为x , y时,先手取了一步变成了$x - 2i$和$y + i$,这个时候后手只需要从y中拿同样的2i个,就可以使得石子数变为$x - i$和$y - i$,而我们知道,两个数同时减去同一个数,它们的差是不会变化的,所以这个时候的$x'$和$y'$依然相差小于等于1,这就转化成了第一种情况
#include<bits/stdc++.h>
using namespace std;
#define R register int
#define LL long long LL x, y;
void work()
{
scanf("%lld%lld", &x, &y);
if(abs(x - y) <= ) printf("Brown\n");
else printf("Alice\n");
} int main()
{
freopen("in.in", "r", stdin);
work();
fclose(stdin);
return ;
}
ARC072 D Alice&Brown 博弈论的更多相关文章
- AT2400 [ARC072B] Alice&Brown
通过打表后可以发现,当初始石头数 \(|X - Y| \le 1\) 时先手必败否则先手必胜. 我们考虑使用归纳证明这个结论,显然 \((1, 0), (1, 1)\) 时是成立的. 基于观察,我们可 ...
- 【AtCoder】ARC072
ARC072 C - Sequence 直接认为一个数是正的,或者第一个数是负的,每次将不合法的负数前缀和改成+1正数前缀和改成-1 #include <bits/stdc++.h> #d ...
- ARC072/ABC059
AtCoder Regular Contest 072 / Beginner Contest 059 Announcement <br > 猛然发现今天有一场AC.....然后..显示手残 ...
- AtCoder刷题记录
构造题都是神仙题 /kk ARC066C Addition and Subtraction Hard 首先要发现两个性质: 加号右边不会有括号:显然,有括号也可以被删去,答案不变. \(op_i\)和 ...
- Multiplication Game
Description Alice and Bob are in their class doing drills on multiplication and division. They quick ...
- hdu 3544 Alice's Game 博弈论
博弈论+二分! 后一人会尽量选前一人切小的一块切!! 代码如下: #include<iostream> #include<stdio.h> #define I1(x) scan ...
- zoj 3529 A Game Between Alice and Bob 博弈论
思路:每个数的SG值就是其质因子个数,在进行nim博弈 代码如下: #include<iostream> #include<cstdio> #include<cmath& ...
- hdu 4111 Alice and Bob 博弈论
这里有2种方法: 方法一:求SG函数 sg[i][j]:i表示1的个数,j表示合并操作的步数. 这共有4种操作: 1.消除一个1: 2.减掉一个1: 3.合并2个1: 4.把1合并到另外不是1中. 代 ...
- ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
ZOJ 3529 - A Game Between Alice and Bob Time Limit:5000MS Memory Limit:262144KB 64bit IO For ...
随机推荐
- Python3 linux安装
./configure --prefix=/usr/local/python3 --with-ssl --enable-optimizations make && make insta ...
- MySQL☞abs函数
abs( )函数:求出绝对值 格式: select abs(数值) from 表名 如下图:
- 【view】 视图组件说明
view 是视图容器,可用于包裹其它组件或文本内容. 原型: <view hover-class="[String]" hover-stop-propagation=&quo ...
- 142. O(1) Check Power of 2【LintCode by java】
Description Using O(1) time to check whether an integer n is a power of 2. Example For n=4, return t ...
- 4. hadoop启动脚本分析
4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...
- css贝塞尔曲线模仿饿了么购物车小球动画
在线观看贝塞尔曲线值:传送门 在线观看动画效果:传送门 代码: <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 福大软工1816:Alpha(8/10)
Alpha 冲刺 (8/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1. 2. 展示GitHub当 ...
- 第二章 shell的语法
变量:字符串.数字.环境和参数 获取变量内容可以在变量前使用$字符,使用echo指令可以将变量内容输出到终端. wuchao@wuchao-Lenovo:~$ var=hello wuchao@wuc ...
- django为model设置表名
class redis_data(models.Model): class Meta: db_table='redis_data' key=models.CharFie ...
- SQL局部变量
声明局部变量 局部变量的声明需要使用declare 语句.并且必须以@开头 declare { @varaible_name datatype[,...n] } varaible_name :局部变量 ...