思路:首先将数组中偶数个数和奇数个数求出,然后每个奇数都可以分割1和一个偶数为一次操作,每个偶数两两合并为一个新偶数,求出当操作多少次后偶数只剩一个。将操作总和求出,然后进行取余操作,若为1则Alice胜,若为0则Bob胜
时间复杂度:O(log2n)
#include<stdio.h>intmain(){longlongi,n,j,ou = 0,ji = 0,num = 0;scanf("%lld",&n);inta[n];for(i = 0;i < n ;i++){scanf("%d",&j);if(j>1){if(j%2){ji++;}else{ou++;}}}ou = ji+ou;num = ji;while(ou>1){num+=(ou/2);ou = ou/2+ou%2;num%=2;}if(num){printf("Alice");}else{printf("Bob");}}
全部评论
(0) 回帖