G59 台阶型 Nim游戏
视频链接:https://www.bilibili.com/video/BV18M411M7TC/
题意:
给你一个单行网格的棋盘,给定 𝑛 个棋子在网格中的初始位置 𝑎𝑖。
每次玩家选择一个棋子,并将其向左移动,但是不能越过任何其他棋子或超过左边界。玩家可以自由选择棋子移动的步数,其限制是棋子必须至少移动一步,一个网格最多可以包含一个棋子。
无法移动任何棋子的玩家将输掉游戏。每次都由格鲁吉亚先手。请你预测谁将获得胜利。
思路:
转化为台阶型 Nim游戏:将空白格子看做台阶上的石子,棋子左移等价于空白格子右移,即石子向右移下台阶。所以,将 n-1,n 棋子间空白格子数记为 b1,将 n-2,n-1 棋子间空白格子数记为 b2,…,将 1 棋子前面的空白格子数记为 bn。
b1∼n分别代表第 1∼n 阶梯上摆放的石子数,b1^b3^b5…≠0 时,先手必胜。
时间:T*nlogn
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int T,n; int a[1005],b[1005]; int main(){ cin>>T; while(T--){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(int i=n;i>=1;i--)b[n-i+1]=a[i]-a[i-1]-1; int s=0; for(int i=1;i<=n;i+=2) s^=b[i]; if(s) puts("Georgia will win"); else puts("Bob will win"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!