题目背景
小X比较差,她(她?tan90°)有许多WA掉的题,所以她很难受。小Z决定去安慰她,可是他的提交记录里一道WA都没有(flag),于是他决定篡改一半题的署名,让小X觉得他们的错题相当,这样她会好受一些
题目描述
每道WA了的题都会有一个分数,对于两个人的WA题程度是否相同,小X有这样一个评判方法:
无聊的她想了这样一个神奇的函数
她认为,无论ai取什么值,两组f(x)的和都相等,则这两组题的错误程度很相似
假如有分值为 A={1,4,6,7 } ,B={2,3,5,8} 的两份被篡改完成的WA题,当a_1=a_2=a_3=1a1=a2=a3=1时,神奇的函数为
f(x)=x^2+x+1f(x)=x2+x+1
那么,f(1)=3,f(2)=7,f(3)=13......f(1)=3,f(2)=7,f(3)=13......
显然 f(1) + f(4) + f(6) + f(7) = 124 = f(2) + f(3) +f(5) +f(8)f(1)+f(4)+f(6)+f(7)=124=f(2)+f(3)+f(5)+f(8)
对于这组系数,此分组方案是合法的,可以证明,a_iai取任意值,按照以上方案分组都满足条件(两组的f(x)f(x)和相同),不信可以手动枚举(_hua|ji_)
所以,A={1,4,6,7 } ,B={2,3,5,8}就是一种合法的分组
输入输出格式
输入格式:
第一行一个整数nn,代表有2^n2n道WA题,分值分别从11到2^n2n, n>=2n>=2 (emmm........满分是inf)
第二行一个整数q,表示有q组询问
最后一行q个整数,询问分值为x的WA题是谁的名字
(因为小X比较菜,所以我们认为分值为1的WA题是属于她的)
输出格式:
一共q行,每行一个字符 ‘XX’ 或 ‘ZZ’ ,表示分值为x的WA题是谁的署名
输入输出样例
说明
对于10%的数据,n<=4 , q<=10;
对于40%的数据,n<=20 , q<=5000;
对于100%的数据,n<=60 , q<=1000000;
题解网址https://pan.baidu.com/s/1qYPuPjA
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef long long lol; 7 lol cnt,n,q; 8 int main() 9 {lol x,i; 10 cin>>n; 11 cin>>q; 12 while (q--) 13 { 14 scanf("%lld",&x); 15 x--; 16 cnt=0; 17 for (i=x;i;i-=(i&(-i))) cnt++; 18 if (cnt%2) printf("Z "); 19 else printf("X "); 20 } 21 }