G59 台阶型 Nim游戏

视频链接:https://www.bilibili.com/video/BV18M411M7TC/

POJ1704 Georgia and Bob

题意

给你一个单行网格的棋盘,给定 𝑛 个棋子在网格中的初始位置 𝑎𝑖。
每次玩家选择一个棋子,并将其向左移动,但是不能越过任何其他棋子或超过左边界。玩家可以自由选择棋子移动的步数,其限制是棋子必须至少移动一步,一个网格最多可以包含一个棋子。
无法移动任何棋子的玩家将输掉游戏。每次都由格鲁吉亚先手。请你预测谁将获得胜利。

 

思路
转化为台阶型 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");
  }
}
复制代码

 

HDU5996 dingyeye loves stone

 

posted @   董晓  阅读(267)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示