• #Multi-SG#HDU 5795 A Simple Nim


    题目

    (n)堆石子,每次可以从一堆中取出若干个或是将一堆分成三堆非空的石子,
    取完最后一颗石子获胜,问先手是否必胜


    分析

    它的后继还包含了分成三堆非空石子的SG函数,找规律可以发现

    [SG[x]=egin{cases}0,x=0\x-1,x=8k(kin N^*)\x+1,x=8k+7(kin N)\x,otherwiseend{cases} ]

    判断(n)堆石子SG函数异或和不为0则先手必胜


    代码

    #include <cstdio>
    #include <cctype>
    #define rr register
    using namespace std;
    inline signed iut(){
    	rr int ans=0; rr char c=getchar();
    	while (!isdigit(c)) c=getchar();
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
    	return ans;
    }
    signed main(){
    	for (rr int T=iut();T;--T){
    		rr int ans=0;
    		for (rr int n=iut();n;--n){
    			rr int x=iut();
    			switch (x&7){
    				case 0:{
    					ans^=x-1;
    					break;
    				}
    				case 7:{
    					ans^=x+1;
    					break;
    				}
    				default:{
    					ans^=x;
    					break;
    				}
    			}
    		}
    		if (ans) puts("First player wins.");
    		    else puts("Second player wins.");
    	}
    	return 0;
    }
    
  • 相关阅读:
    mdadm
    RAID磁盘阵列学习笔记
    内存究竟有多快?
    fping
    Intel® RAID Software User’s Guide
    为什么寄存器比内存快?
    OC-Category
    OC-id、构造方法
    OC- @property @synthesize
    OC-点语法
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/14619368.html
Copyright © 2020-2023  润新知