怎么建设网站手机网站制作价格,广东联通通信建设有限公司 网站,济宁网站运营策略,wordpress自定义post题干#xff1a;
一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢…题干
一年在外 父母时刻牵挂 春节回家 你能做几天好孩子吗 寒假里尝试做做下面的事情吧 陪妈妈逛一次菜场 悄悄给爸爸买个小礼物 主动地 强烈地 要求洗一次碗 某一天早起 给爸妈用心地做回早餐 如果愿意 你还可以和爸妈说 咱们玩个小游戏吧 ACM课上学的呢 下面是一个二人小游戏桌子上有M堆扑克牌每堆牌的数量分别为Ni(i1…M)两人轮流进行每走一步可以任意选择一堆并取走其中的任意张牌桌子上的扑克全部取光则游戏结束最后一次取牌的人为胜者。 现在我们不想研究到底先手为胜还是为负我只想问大家 ——“先手的人如果想赢第一步有几种选择呢”
Input
输入数据包含多个测试用例每个测试用例占2行首先一行包含一个整数M(1M100)表示扑克牌的堆数紧接着一行包含M个整数Ni(1Ni1000000i1…M)分别表示M堆扑克的数量。M为0则表示输入数据的结束。
Output
如果先手的人能赢请输出他第一步可行的方案数否则请输出0每个实例的输出占一行。
Sample Input
3
5 7 9
0
Sample Output
1
解题报告 AC代码
#includebits/stdc.h
#define ll long long
using namespace std;
const int MAX 1000000 5 ;
ll a[MAX],sum[MAX];
int main()
{int m;while(~scanf(%d,m)) {if(m 0) break;sum[0]0;int cnt 0;for(int i 1; im; i) {scanf(%lld,ai),sum[i] a[i] ^ sum[i-1];// printf(%d %lld\n,i,sum[i]);}if(sum[m] 0) 1;else {for(int i 1; im; i) {ll tmp (sum[i-1]^sum[0]) ^ (sum[m]^sum[i]);if( tmp 0) {cnt;}else {if(a[i] - tmp 0) {cnt;}}}}printf(%d\n,cnt);}return 0;
}