当前位置: 首页 > news >正文

丢石子

I

一堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win".

思路:

任何正整数都可以表示为不连续斐波那契博数之和。

引理:如果m是斐波那契数,那么不超过m的所有斐波那契数中,选出若干个不连续的,能够得到的最大的和刚好就是m-1。

比如说,在1,2,3,5,8,里面,最大的和就是1+3+8=12,刚好是13-1。

--------------------------------------------------------------------------------------

当n=2时,后手必赢;

当n=3时,后手必赢;

当n=4时,只要先手取1个,剩下3个,无论后手取多少个,先手必赢;

当n=5时,①若先手先取1个,剩下4个,此时后手掌握n=4这种局面,则后手必赢;②若先手取2个,根据规则,后手可以一次性取完剩下的3个,则后手必赢;所以先手无论怎么取,此时后手必赢。

当n=6时,先手只要取1个,先手就掌握了n=5这种局面,即先手必赢;

当n=7时,先手只要取2个,先手就掌握了n=5这种局面,即先手必赢;

当n=8时,①若先手取1个时,后手就掌握了n=7这种局面,即后手必赢;②若先手取2个时,后手就掌握了n=6这种局面,即后手必赢;③若先手取3个,根据规则,后手可以一次性取走剩下的5个,剩下的情况都是后手必赢;所以无论先手怎么取,此时后手必赢。

......

继续推导下去,我们可以发现,只要n满足斐波那契数列2,3,5,8,13......,则后手必赢,否则先手必赢。相关证明看这:斐波那契博弈

public boolean helper(int n){ int f1=1;int f2=2;int f3=3;while(n>=f3){f3=f1+f2;if(f3==n) return false;f1=f2;f2=f3;}return true;
}

II

一堆石子有n个,两人轮流取.每次取最少取1个,最多取m个。取完者胜.先取者负输出"Second win".先取者胜输出"First win"

思路:

基础的巴什博奕
巴什博奕的重点是只有一堆,
如果n % (m + 1) != 0 则先手赢,如果用普通的数组会TLE。
证明:如果n = m + 1,先手最多拿m个,肯定有剩下的,所以先手必输,所以碰到k(m + 1)的局面的人必输。那么如果n = k(m + 1) + s,这个k 就是系数,s < m + 1,那么只要先手拿掉s个,这样后手面对的就是k(m + 1)局面,所以先手在n % (m + 1) != 0时必输。
 

#include <stdio.h>
#include <stdlib.h>int main()
{int m=0,n=0;while(~scanf("%d %d",&n,&m)){if(n%(m+1)==0){printf("Second win\n");}else{printf("First win\n");}}return 0;
}

http://www.lryc.cn/news/63150.html

相关文章:

  • skywalking手动上报一些指标信息
  • NUMA详解
  • H68K在Armbina系统下开AP
  • 还不懂Redis?看完这个故事就明白了!
  • Haproxy负载均衡集群
  • 17.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度
  • 企业数字化管理中,数据治理到底怎么“治”
  • 《HelloGitHub》第 85 期
  • 自动驾驶人机交互HMI产品技术方案
  • 开发感悟20230426
  • C和C++的区别
  • 【力扣-141】 环形链表 + 【力扣-142】 环形链表 II
  • 云计算:优势与未来趋势
  • Linux namespace
  • 第十三章 移动和旋转(上)
  • 视频文件切片
  • 维生素的缺乏与生理功能,是否需要补充维生素【持续学习】
  • CUDA下载,以及下载GPU版本的pytorch
  • 学习笔记:c存储类
  • 236. 二叉树的最近公共祖先【190】
  • 即时配送,即时很重要!商家能不能盈利,“快”是源头
  • ChatGPT原理剖析
  • 「C/C++」C/C++软件跨平台思维
  • c# 通过界面上填写的信息输出到对应的word中,并另存为一个新的文件
  • HTML+CSS+JS 学习笔记(四)———jQuery
  • TryHackMe-Mnemonic(boot2root)
  • Nacos注册中心的使用
  • 项目中别用 “! = null“ 做判空了
  • MySQL数据库——MySQL子查询
  • 工具链和其他-超级好用的web调试工具whistle