威佐夫博弈及其拓展

威佐夫博弈

普通威佐夫博弈:

两种操作:一、同时在两堆上取相同的个数。二、在某一堆上取任意个数。(每次取不为0)

a[n]=nα,b[n]=a[n]+n,α=1+52a[n] = n \alpha, b[n] = a[n] + n,\alpha = \frac{1 + \sqrt5}{2}a[n]=nα,b[n]=a[n]+n,α=21+5,这个时候是可以确定必败状态的。

这里就不详细展开证明了。

威佐夫博弈拓展:

两种操作:一、同时在两堆分别取x,y,∣x−y∣<=kx, y, \mid x - y \mid <= kx,yxy<=k。二、在某一堆上取任意个数。(每次取不为0)

对于给定的限定kkk,于是题目判定变成了a[n]=nα,b[n]=a[n]+(k+1)na[n] = n \alpha, b[n] = a[n] + (k + 1)na[n]=nα,b[n]=a[n]+(k+1)n,带入kkk等于0的时候也就是普通情况下成立,

所以我们可以先解得α\alphaα,然后再通过二分去寻找是否有符合要求的nnn,这个时候α\alphaα的有关方程是1α+1α+k+1=1\frac{1}{\alpha} + \frac{1}{\alpha + k + 1} = 1α1+α+k+11=1

即可解的方程然后带入验证即可。

取(2堆)石子游戏(普通威佐夫)

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int a, b;while(cin >> a >> b && (a + b)) {map<int, int> MP;if(a < b) swap(a, b);int k = (a - b) * ((1 + sqrt(5)) / 2);if(k == b) {puts("0");continue;}puts("1");for(int i = 1; i <= b; i++) {int n = a - i, m = b - i;int k = (n - m) * ((1 + sqrt(5)) / 2);if(k == m) {printf("%d %d\n", m, n);}}for(int i = 1; i <= a; i++) {int n = a - i, m = b;if(n < m) swap(n, m);int k = (n - m) * ((1 + sqrt(5)) / 2);if(MP[m] == n) continue;MP[m] = n;if(k == m) {printf("%d %d\n", min(n, m), max(n, m));}}for(int i = 1; i <= b; i++) {int n = a, m = b - i;if(n < m) swap(n, m);int k = (n - m) * ((1 + sqrt(5)) / 2);if(MP[m] == n) continue;MP[m] = n;if(k == m) {printf("%d %d\n", m, n);}}}return 0;
}

Slime and Stones(拓展威佐夫)

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>#define mp make_pair
#define pb push_back
#define endl '\n'
#define mid (l + r >> 1)
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define ls rt << 1
#define rs rt << 1 | 1using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}ll calc(ll n, ll k) {double A = 1, B = k - 2, C = -k;double a = (sqrt(B * B - 4 * A * C) - B) / (2 * A);ll l = 1, r = 1e9;while(l < r) {ll Mid = l + r >> 1;ll now = Mid * a + k * Mid;if(now >= n) r = mid;else l = mid + 1;}ll now = l * a + k * l;return now == n ? l : -1;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);int T = read();while(T--) {ll a = read(), b = read(), k = read() + 1;if(a < b) swap(a, b);ll n = calc(a, k);if(n == -1) puts("1");else {if(a - b == n * k) puts("0");else puts("1");}}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

E - Rotate and Flip(转化一般性)

E - Rotate and Flip 对于有n个点&#xff0c;m个变换&#xff08;包括旋转90度和关于某条直线对称&#xff09;&#xff0c;q次询问ai点在bi个变换后的坐标。 显然对于这些变换我们都是能够直接利用公式求解的&#xff0c;所以我们直接用未知数表示变换后的坐标即可&#xf…

谈自由,ASP.NET Core才是未来?

首先我要说一下自己对自由的理解&#xff1a;自由是我可以选择不干什么&#xff0c;但我要保留我可以干什么的可能性。比如说我现在只有一个码农的角色&#xff0c;但我仍然要保留可以扮演其他角色的可能&#xff0c;比如成为一个作者&#xff0c;当我写下文章的时候已经是了&a…

Spring Boot 学习之旅

1. Spring Boot默认读取的application.properties有点坑&#xff0c;并没有主动去掉每一行后边的空格&#xff0c;如 encoding.spring.thymeleaf.encodingUTF-8 就识别成了UTF-8空格&#xff0c;所以导致查找编码格式的时候报错。

Min_25筛有关求解次小质因子

#188. 【UR #13】Sanrd 题意化简就是求次小质因子&#xff0c;这一步我们可以在Min_25筛的ans计算中得到&#xff0c; S(n, j)表示的是最小质因子大于等于primejprime_jprimej​的加上质数的答案贡献&#xff0c; 要满足次小质因子&#xff0c;一定有除去这个数之后只剩下质…

今天,全网曝光这几个公众号

有人统计过&#xff0c;我们平均每天花在看内容上的时间是5-6小时与其每天被各种看过就忘的内容占据时间不如看点真正对你有价值的信息下面小编为你推荐几个高价值的公众号&#xff0c;这些公众号都是专注.NET技术它们提供的信息能真正提高你生活的质量当你迷茫的时候刷刷这些大…

dp套dp(动态规划)

dp套dp 这是一个对于一类动态规划的计数问题的处理方法&#xff0c;问题常常是如果形式确定就可以直接dp&#xff0c;但是现在却要求满足某个要求的所有方案数&#xff0c;一般的处理方法就是一维负责增量构造&#xff0c;其他维度用来表示内部dp状态&#xff0c;然后转移时候…

Redis学习之Docker环境搭建

最近想学习下Redis&#xff0c;想在本机部署redis集群&#xff0c;发现redis对windows支持不太友好&#xff0c;因此想着安装linux虚拟机&#xff0c;部署一个redis集群&#xff0c;供学习用。 首先想到的是linux虚拟机使用起来太麻烦&#xff0c;想用之前用过的vagrant来简化虚…

.NET Core 小程序开发零基础系列(1)——开发者启用并牵手成功

最近几个月本人与团队一直与小程序打交道&#xff0c;对小程序的实战开发算比较熟悉&#xff0c;也因一些朋友经常问我各种小程序问题&#xff0c;无不能一一回答&#xff0c;想了很久&#xff0c;决定还是空余时间来写写文章吧&#xff0c;偶尔发现一个人安静的时候写文章特爽…

Tarjan缩点/边双/点双

文章目录代码实现实际应用1.有向图另外&#xff1a;对于缩点之后的DAG的处理2.无向图求法细节细节&#xff1a;目录&#xff1a;1.「POJ 3694」Network2.「2019 ICPC 横滨站」3. P3225 [HNOI2012]矿场搭建4. 一本通 分离的路径代码实现 所以其实就三个玩意 1.dfn[],low[],indx…

「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)

#572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i1n∑j1nf(gcd(i,j))k∑d1nf(d)k∑i1nd∑j1nd[gcd(i,j)1]∑d1nf(d)k∑K1ndμ(k)(nKd)2tKd∑t1n(nt)2∑d∣tf(d)kμ(td)我们记f(x)kF(x)上面式子后半部分是一个迪利克雷卷积形式:F∗μ所以我们卷上一个I&#xff0c…

学习笔记之12个月提升计划

Java世界博大精深&#xff0c;有太多的东西要学。如果一头扎进去&#xff0c;很可能会淹没在Java技术的海洋里。于是&#xff0c;最近一直在思考列一个提纲&#xff0c;作为高级工程师到资深、再到架构之路的路标。 学习笔记一栏&#xff0c;即为本计划的博客记录。将自己的计划…

从“梁漱溟:思考问题有八层境界”所联想到的

最近一段时间以来写的文章比较少了&#xff0c;这固然是有一些客观原因&#xff0c;但确实有我不可说的一些自我反省和认识等主观因素。记得8月初有一次友人聚餐&#xff0c;席间有朋友聊到公众号的运营心得体会&#xff0c;其中有一条是&#xff1a;避免粉丝减少的黄金法则之一…

P4126 [AHOI2009]最小割(网络流/最小割)

P4126 [AHOI2009]最小割 https://www.cnblogs.com/dugudashen/p/6228304.html 求解一张有向图中关于最小割的可行边和必须边&#xff0c;可行边定义为存在一种最小割包含这条边&#xff0c;必须边定义为任意一种最小割包含这条边。 可行边的条件&#xff1a; 满流对于边<…

vagrant 环境配置

vagrant是简便虚拟机操作的一个软件&#xff0c;而使用虚拟机有几个好处&#xff1a; 1、为了开发环境与生产环境一致&#xff08;很多开发环境为windows而生产环境为linux&#xff09;&#xff0c;不至于出现在开发环境正常而移步到正式生产环境时出现各种问题&#xff0c;而…

与Min_25筛有关的一些模板

模板 求∑i1nf(i),f(pk)pk(pk−1)\sum \limits_{i 1} ^{n} f(i), f(p ^ k) p ^ k \times(p ^ k - 1)i1∑n​f(i),f(pk)pk(pk−1)&#xff0c;最后对mod1e97\bmod 1e9 7mod1e97&#xff0c;这个函数是个积性函数。 /*Author : lifehappy */ #pragma GCC optimize(2) #pragm…

P4897 【模板】最小割树(Gomory-Hu Tree)(网络流/最小割/树形结构)

P4897 【模板】最小割树&#xff08;Gomory-Hu Tree&#xff09; 这个算法可以用来求解一个无向图上任意两点的最小割&#xff0c;具体过程就是每次选择两个点求最小割&#xff0c;然后在一个新图中这两个点连边&#xff0c;然后对于这两个点的连通块分别递归处理&#xff0c;…

程序员过关斩将--cookie和session的关系其实很简单

喜欢就点关注吧!月高风下&#xff0c;下班路上....菜菜哥&#xff0c;告诉你一个秘密&#xff0c;但是不允许告诉任何人这么秘密&#xff0c;你有男票了&#xff1f;~不是&#xff0c;昨天我偷偷去面试了&#xff0c;结果挂了这不是好事吗&#xff0c;上天让公司留住你.....好吧…

Georgia and Bob(Poj 1704)Nim 博弈

Georgia and Bob 思路 每个棋子只能向左移动并且不能越过其左边的棋子&#xff0c;这就有点像是经典的nim博弈了&#xff0c; 但是在这里后一个石子会受到其前一个石子位置的影响&#xff0c;这里就需要转化一下了。 我们假设只有两个棋子&#xff0c;x,y,x>0,y>xx, …

.NET导出Excel的四种方法及评测

前言导出Excel是.NET的常见需求&#xff0c;开源社区、市场上&#xff0c;都提供了不少各式各样的Excel操作相关包。本文&#xff0c;我将使用NPOI、EPPlus、OpenXML、Aspose.Cells四个市面上常见的库&#xff0c;各完成一个导出Excel示例。然后对其代码风格和性能做一个横向比…

[2021.1.27多校省选模拟10]染色(min-max容斥/二项式反演)

[2021.1.27多校省选模拟10]染色 突然发现我对概率期望的理解不是很好。。。 部分分1&#xff1a;可以直接进行状压dp&#xff0c;然后按照题意模拟即可。 部分分2&#xff1a;首先可以发现这个问题是min_max容斥形式&#xff0c;然后对于min(T)的问题&#xff0c;我们将问题转…