在意派建设好网站后,2021年年度关键词排名,微信公众号人工服务电话,电脑网游怎么又是博弈论。。。我去 Orz hzwer#xff0c;这道题其实是可以转化成Nim游戏的#xff01; 第一步#xff1a; 先从n根巧克力棒中取出m(m0)根#xff0c;使得这m根巧克力棒的xor和为0#xff0c;同时使得剩下的n-m根巧克力棒无论怎么取#xff0c;xor和都不…怎么又是博弈论。。。我去 Orz hzwer这道题其实是可以转化成Nim游戏的 第一步 先从n根巧克力棒中取出m(m0)根使得这m根巧克力棒的xor和为0同时使得剩下的n-m根巧克力棒无论怎么取xor和都不为0。 m根巧克力棒的xor和为0 把nim游戏的必败状态留给对方 剩下的n-m根巧克力棒无论怎么取xor和都不为0 m为巧克力棒的xor和为0的最长子序列 第二步 第一步以后对手就面临一个必败状态的nim游戏。 如果他从n-m根中取新的巧克力棒实际上就是新建一个xor和不为0的nim游戏这时轮到己方操作只要将这个新的nim游戏取到xor和为0即可。 也就是让对方再次面临所有nim游戏均为必败状态的局面。 于是只要寻找m是否存在即可由于n 14深搜即可。 1 /**************************************************************2 Problem: 12993 User: rausen4 Language: C5 Result: Accepted6 Time:8 ms7 Memory:804 kb8 ****************************************************************/9
10 #include cstdio
11
12 using namespace std;
13 int n, a[20];
14 bool flag;
15
16 inline int read(){
17 int x 0, sgn 1;
18 char ch getchar();
19 while (ch 0 || ch 9){
20 if (ch -) sgn -1;
21 ch getchar();
22 }
23 while (ch 0 ch 9){
24 x x * 10 ch - 0;
25 ch getchar();
26 }
27 return sgn * x;
28 }
29
30 void dfs(int x, int cnt, int X){
31 if (x n 1){
32 if (!X cnt) flag 1;
33 return;
34 }
35 if (flag) return;
36 dfs(x 1, cnt, X);
37 if (flag) return;
38 dfs(x 1, cnt 1, X ^ a[x]);
39 }
40
41 int main(){
42 for (int t 1; t 10; t){
43 flag 0;
44 n read();
45 for (int i 1; i n; i)
46 a[i] read();
47 dfs(1, 0, 0);
48 printf(flag ? NO\n : YES\n);
49 }
50 return 0;
51 } View Code 转载于:https://www.cnblogs.com/rausen/p/4052548.html