hihocoder 1173 题解

传送门

这道题虽然还是石子,但是用SG函数分析一下x的后继状态,有
1,2,3,……,n-1,以及(1,n-1),(2,n-2),(3,n-3)……
所以可以得到:
sg(x)=mex(sg(1),sg(2),sg(3),……,sg(n-1),sg(1)^sg(n-1),sg(2)^sg(n-2)……)
这样sg(x)不一定等于x,不过我们还是可以找规律。先写一个求1-100的sg函数。

#include<cstdio>
#include<cstring>
bool vs[105];
int sg[105];
int main()
{
    sg[0]=0;
    for (int i=1;i<=100;i++)
    {
        memset(vs,0,sizeof(vs));
        for (int j=1;j<i;j++) vs[sg[j]]=1;
        for (int j=1;j<i;j++) vs[sg[j]^sg[i-j]]=1;
        for (int j=1;j<=102;j++)
            if (!vs[j]){sg[i]=j; break;}
    }
    for (int i=1;i<=100;i++) printf("%d %d\n",i,sg[i]);
    return 0;
}

结果输出为:

1 1
2 2
3 4
4 3
5 5
6 6
7 8
8 7
9 9
10 10
11 12
12 11
13 13
14 14
15 16
16 15
17 17
18 18
19 20
20 19
21 21
22 22
23 24
24 23
25 25
26 26
27 28
28 27
29 29
30 30
31 32
32 31
33 33
34 34
35 36
36 35
37 37
38 38
39 40
40 39
41 41
42 42
43 44
44 43
45 45
46 46
47 48
48 47
49 49
50 50
51 52
52 51
53 53
54 54
55 56
56 55
57 57
58 58
59 60
60 59
61 61
62 62
63 64
64 63
65 65
66 66
67 68
68 67
69 69
70 70
71 72
72 71
73 73
74 74
75 76
76 75
77 77
78 78
79 80
80 79
81 81
82 82
83 84
84 83
85 85
86 86
87 88
88 87
89 89
90 90
91 92
92 91
93 93
94 94
95 96
96 95
97 97
98 98
99 100
100 99

有什么规律?对x%4进行分析:当x%4等于1或2时,sg(x)=x,当x%4=3时,sg(x)=x+1; 当x%4==0时,sg(x)=x-1。所以利用这个规律套SG定理,求一趟异或就行了。

#include<cstdio> 
using namespace std;
int n,ans,x;
inline void readi(int &x)
{
    x=0; char ch=getchar();
    while ('0'>ch||ch>'9') ch=getchar();
    while ('0'<=ch&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
}
int main()
{
    readi(n); ans=0;
    for (int i=1;i<=n;i++)
    {
        readi(x);
        switch (x%4)
        {
            case 0:x--; break;
            case 3:x++; break;
        }
        ans^=x;
    }
    if (ans) printf("Alice");
    else printf("Bob");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值