Nim游戏的一个扩展——51nod 1661 黑板上的游戏+LA 5059 Playing With Stones

前几天做过一道题目,是Nim游戏的一个扩展,也不能说扩展吧,只是说另一种常见的状态。

问题引入:

给定n堆石子,每堆石子有vi(1<=vi<=1e5) 个,每次可以取一堆中的一些石子,使得剩下的石子为1到vi/k个,为最后的是先手胜,还是后手胜,如果先手胜则输出相应的操作策略。

思考:

当k==2的时候,显然就退化成了la 5059 的题目,我们以此为基础来考虑,肯定要先计算出sg的函数表,然后观察规律,lrj在训练指南中说的很清楚,打表的规则也很简单,下面给出lrj所打出的表:
0 1 0 2 1 3 0 4 2 5
当然,lrj是从奇偶性来分析的,那么很容易得出
sg(x)=n%2==0?sg(n/2)这样的结论,因为k==2,刚好有一些特性被提现出来了。所以:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
ll sg(ll n)
{return n%2==0 ? n/2 : sg(n/2);
}
int main()
{int T;scanf("%d",&T);while(T--){int n;ll x;scanf("%d",&n);ll ans=0;while(n--){scanf("%lld",&x);ans^=sg(x);}if(ans)printf("YES\n");elseprintf("NO\n");}return 0;
}

那么当k>2的时候,又该怎么去解决?难道比葫芦画瓢?要推出
sg=(n%k==0)?n/k:sg(n/k) 这样的结论,如果真的这样,我只能说比葫芦画瓢的能力只用在了记答案上,这种能力应该是一种分析该问题的方法,正确的解法无非是打sg表,寻找规律。

笔者随手推了一下,那么打出的表如下:

k==3: 0 1 2 0 3 4 1 5 6
k==4:0 1 2 3 0 4 5 6 1 7 8 9

可以发现,都有123456……这个序列,而再去翻看上面的n==2的情况,发现都存在这样的规律,但是,好像没什么用,具体编程还是没办法操作,再去细看,发现打断123456这个序列的的下标x都是x%k==1,而且去掉123456这样的数后得到的都是原序列,那么,也就是说,当x%k==1时,sg(x)=sg(x/k) 否则,这样的123456序列实际上是由x-阶梯层数得到的,什么是阶梯层数,当k==3的时候x=1,2,3就属于第一层,x=4,5,6 就属于第二层,那么容易得出:

x%k==1 ? sg(x/k) : x-x/k-(x%k!=0);

于是,上题的第二种解法为:

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
ll k=2;
ll sg(ll x){if (x==1) return 0;return x%k==1 ? sg(x/k) : x-x/k-(x%k!=0);
}
int main()
{int T;scanf("%d",&T);while(T--){int n;ll x;scanf("%d",&n);ll ans=0;while(n--){scanf("%lld",&x);ans^=sg(x);}if(ans)printf("YES\n");elseprintf("NO\n");}return 0;
}

而对于51nod中要求求必胜操作时,只需预处理一下sg值,然后枚举每一位根据sg值来逆推符合条件的x即可。

提交地址:
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1661

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const int N=1e5+5;ll n,k,sl[N],sr[N],v[N],vt[N];
ll sg(ll x){if (x==1) return 0;return x%k==1 ? sg(x/k) : x-x/k-(x%k!=0);
}int main()
{sl[0]=sr[n+1]=0;cin>>n>>k;ll p=0,ans=0;for (int i=1;i<=n;i++){scanf("%lld",v+i);vt[i]=sg(v[i]);sl[i]=sl[i-1]^vt[i];}for (int i=n;i>=1;i--) sr[i]=sr[i+1]^vt[i];for (int i=1;i<=n;i++){ll tt=sl[i-1]^sr[i+1],tx=ceil(1.0*v[i]/k);if (v[i]==1||vt[i]<=tt) continue;ll ttl=(ll)(1.0*tt*k/(k-1)+1);if (ttl%k==1) ttl--;for (int j=0;j<64;j++){if (ttl>=tx) break;ttl=ttl*k+1;}if (ttl<v[i]&&sg(ttl)==tt){p=i;ans=ttl;break;}}if (sl[n]) cout<<"Alice "<<p<<" "<<ans<<endl;else puts("Bob");
}

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

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

相关文章

【转】三五个人十来条枪 如何走出软件作坊成为开发正规军

自从发了上一篇博文&#xff0c;这几天收到很多朋友的来信。大家从各个开发语言的优缺点和适用领域&#xff0c;一直讨论到设计模式、框架、重构、单元测试&#xff0c;乃至敏捷编程&#xff0c;最后都讨论到了软件开发过程管理&#xff0c;甚至都谈到了盈利模式和中国软件的悲…

2016年湖南省第十二届大学生计算机程序设计竞赛

题目&#xff1a; 任意门 听说这套题目是叉姐出的&#xff0c;感觉呵呵了。。。 据说现场牌都不够发的&#xff01;&#xff01;&#xff01;只能说给湖南省出的题目太强了&#xff0c;不适合新手去做&#xff0c;当然我这种老手也不见得做的多好&#xff0c;出了3题&#xf…

控件中的Events个人理解。

首先&#xff0c;了解一下与事件和委托有关的几个类和属性&#xff1a;Delegate, MulticastDelegate, EventHandler, EventHandlerList, EventHandlerList.ListEntry, Control, ComponentControl的Events属性是由System.ComponentModel.Component 继承而来,它是EventHandlerLis…

告白——一个loser的手记

“真不知道怎么会是这样&#xff1f;” 回味以前的种种&#xff0c;到最后才发觉你是如此的模样&#xff0c;如此的狼狈和破败&#xff0c;如此不堪一击。 你曾经以为和高手的差别不过丝毫&#xff0c;但今天看过来&#xff0c;高手夺得了顶峰&#xff0c;而你确一直在这里徘…

ManualResetEvent用法

ManualResetEvent 允许线程通过发信号互相通信。通常&#xff0c;此通信涉及一个线程在其他线程进行之前必须完成的任务。 public static ManualResetEvent mre new ManualResetEvent(false); ManualResetEvent建立时是把false作为start的初始状态&#xff0c;这个类用于通知另…

2014_anshan_onsite

5070 Twelve Months 5071 Chat 比较长的模拟 5072 Coprime 容斥 同色三角形建模后&#xff0c;转化为互质个数问题 5073 Galaxy 数学题&#xff0c;公式递推和化简 5074 Hatsune Miku dp,分类讨论和递推 5075 Random Inversion Ma…

几种流行的JS框架的选择

目前来看&#xff0c;JS框架以及一些开发包和库类有如下几个&#xff0c;Dojo 、Scriptaculous 、Prototype 、yui-ext 、Jquery 、Mochikit、mootools 、moo.fxAjaxian在2007年底对Ajax工具进行了调查&#xff0c;部分调查结果见下表&#xff08;其中数字为调查者使用该工具的…

2014_beijing_onsite

5112 A Curious Matt 签到&#xff0c;排序题目 5113 Black And White 5*5的方格&#xff0c;dfs剪枝 5114 Collision 线性方程求解 扩展欧几里得 5115 Dire Wolf 简单的区间DP问题。 5116 Everlasting L 5117 Fluorescent …

[转]关于HTTP服务器每个客户端2个连接的限制

这两天猫在家里搞一个多线程的断点续传得C#程序&#xff0c;发现同时只能开2个线程下载&#xff0c;其他的线程一律要等待&#xff0c;这样就导致下载大文件时其他线程经常超时&#xff0c;郁闷好久。今天回公司无意中发现了一个帖子&#xff0c;终于真相大白了&#xff0c; …

2014_guangzhou_onsite

5127 Dogs Candies 链表&#xff0c;暴力 5128 The E-pang Palace 计算几何水题&#xff0c;求不相交两个矩形的最大面积 5129 Yong Zhengs Death 5130 Signal Interference 计算圆与多边形的交&#xff0c;计算几何模板题目 5131 Song Jian…

[ SAP ]MM Valuation System

1、除了工厂&#xff0c;另一个会决定不同的会计科目的因素是物料本身&#xff0c;所以我们在物料主数据中会需要定义一个“评估类”参数&#xff0c;通过“评估类”来决定会计科目。 2、创建/更改/删除物料主数据&#xff1a;后勤-》物料管理-》物料主数据-》物料 MM01创建物…

2014_shanghai_visit

5090 Game with Pearls 签到题目&#xff0c;直接模拟即可。 5091 Beam Cannon 矩形覆盖的最大点数&#xff0c;离散化扫描线线段树。 5092 Seam Carving 记录路径的DAG 5093 Battle ships 行列建边&#xff0c;二分图匹配 5094 Maze …

从MySQL导入导出大量数据的程序实现方法

大家一定使用过 phpmyadmin 里面的数据库导入&#xff0c;导出功能&#xff0c;非常方便。但是在实际应用中&#xff0c;我发现如下几个问题&#xff1a; 1 数据库超过一定尺寸&#xff0c;比如6M 这时使用导出一般没问题&#xff0c;可以正确的保存到本机硬盘上面&#xff0c…

2013_chengdu_visit

4716 A Computer Graphics Problem 签到题目&#xff0c;模拟。 4717 The Moving Points 求n个点的最大距离最小值&#xff0c;三分时间即可 4718 The LCIS on the Tree LCT动态树 4719 Oh My Holy FFF 4720 Naive and Silly M…

JavaScript: Cookie 详解、实例与应用

Cookie&#xff08;也&#xff09;是JavaScript中的一种机制&#xff0c;可以实现严格的跨页面全局变量的要求。 Cookie是存于用户硬盘的一个文件&#xff0c;这个文件通常对应于一个域名&#xff0c;当浏览器再次访问这个域名时&#xff0c;便使这个cookie可用。因此&#xff…

2013_warmup

感觉题目质量很差的一套&#xff0c;可能是不正式的原因。 4706 Childrens Day 签到题。 4707 Pet 签到题目&#xff0c;BFS或者DFS; 4708 Rotation Lock Puzzle 分析模拟题 4709 Herding 计算几何水题。 4710 Balls R…

cs模式下,显示网络图片一例

由于在cs模式中 显示图片很简单picturebox1.imageimage.fromfile(filename) 但是filename不能是url&#xff0c;所以不能显示网络图片&#xff0c;怎么办呢&#xff1f;其实 .net 为我们准备了一套很方便的方法。在.net中&#xff0c;网上的资源&#xff08;图片&#xff0c;动…

2013_chengdu_online

4728 A Game in the Hospital 4729 An Easy Problem for Elfness 4730 We Love MOE Girls 签到题目 4731 Minimum palindrome 规律构造 4732 Round Table 4733 G(x) 枚举dp 4734 F(x) 数位dp基础题目。…

【Vegas2008】7月19日-凉粉的做法

1&#xff09; 准备淀粉&#xff0c;1个量杯。2&#xff09; 盛出1杯淀粉到小锅里&#xff0c;倒6份凉水到小锅里。淀粉和水的比例是1&#xff1a;6&#xff0c;用什么工具来量并不重要&#xff0c;把比例弄好了就行。另外&#xff0c;关于比例&#xff0c;有人喜欢1&#xff1…

2013_hangzhou_online

4738 Caocaos Bridges 求无向图的桥中最小的那个&#xff0c;tarjan 4739 Zhuge Liangs Mines 状态压缩暴力 4740 The Donkey of Gui Zhou 求两个点在图上的相遇点&#xff0c;模拟dfs 4741 Save Labman No.004 计算几何&#xff0c;平面上的两条…