答案错误

来源:互联网 发布:w7搜索不到网络打印机 编辑:程序博客网 时间:2024/04/28 03:54

题目背景

小X比较差,她(她?tan90°)有许多WA掉的题,所以她很难受。小Z决定去安慰她,可是他的提交记录里一道WA都没有(flag),于是他决定篡改一半题的署名,让小X觉得他们的错题相当,这样她会好受一些

image

题目描述

每道WA了的题都会有一个分数,对于两个人的WA题程度是否相同,小X有这样一个评判方法:

无聊的她想了这样一个神奇的函数

image

她认为,无论ai取什么值,两组f(x)的和都相等,则这两组题的错误程度很相似

假如有分值为 A={1,4,6,7 } ,B={2,3,5,8} 的两份被篡改完成的WA题,当a1=a2=a3=1a_1=a_2=a_3=1a1=a2=a3=1时,神奇的函数为

f(x)=x2+x+1f(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)=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)f(1)+f(4)+f(6)+f(7)=124=f(2)+f(3)+f(5)+f(8)

对于这组系数,此分组方案是合法的,可以证明,aia_iai取任意值,按照以上方案分组都满足条件(两组的f(x)f(x)f(x)和相同),不信可以手动枚举(_hua|ji_)

所以,A={1,4,6,7 } ,B={2,3,5,8}就是一种合法的分组

输入输出格式

输入格式:

第一行一个整数nnn,代表有2n2^n2n道WA题,分值分别从1112n2^n2nn>=2n>=2n>=2 (emmm........满分是inf)

第二行一个整数q,表示有q组询问

最后一行q个整数,询问分值为x的WA题是谁的名字

(因为小X比较菜,所以我们认为分值为1的WA题是属于她的)

输出格式:

一共q行,每行一个字符 ‘XXX’ 或 ‘ZZZ’ ,表示分值为x的WA题是谁的署名

输入输出样例

输入样例#1:复制
324 5
输出样例#1:复制
XZ

说明

对于10%的数据,n<=4 , q<=10;

对于40%的数据,n<=20 , q<=5000;

对于100%的数据,n<=60 , q<=1000000;


一道正解比暴力还短的水题

——其实就是等幂和问题

10分做法

暴力枚举每个值在A组还是B组,因为ai可以取任意值,就随便瞎取,当搜出的方案只有唯一一种时,显然就是答案,时间复杂度O(n*2^(2^n))

其实这个时候已经可以发现分组有一些神奇的地方,再多想一下就是40分了

 

40分做法

根据暴力,我们有:

n=2时,A={1,4} , B={2,3};

n=3时,A={1,4,6,7} , B={2,3,5,8};

n=4时,A={1,4,6,7,10,11,13,16} , B={2,3,5,8,9,12,14,15}

............

可以发现,第n次的分组,在第n+1次时并没有改变,而新加入的数:

n=3时,新加入A组的数 6=2+22,7=3+22,2,3属于B组

新加入B组的数 5=1+22,8=4+22,1,4属于A组

n=4时,新加入A组的数 10=2+23,11=3+23,13=5+23,16=8+23,2,3,5,8属于B组

新加入B组的数 9=1+23,12=4+23,14=6+23,15=7+23,1,4,6,7 属于A组

不妨大胆猜测,第n次新加入的数,就是另一组中的所有数加上2n-1,递推得出所有数的分组,时间复杂度O(2^n),其实想到40分100也就出来了

 

100分做法

用数学归纳法证明刚刚的结论:

对于1 ~ 2n( n∈N,n>=2 ),1分在A组,2分在B组,并按从小到大排列,若前2k已分组完成,对于新加入的2k+1 ~ 2k+1,若满足,,则对于任意 ,两组和均相等

 

1.当n=2时,显然,(a1*1+ a2 ) + (a1*4 + a2 ) = (a1*2 + a2) + (a1*3 + a2 ),

结论成立;

 

2.假设n=k时结论成立,那么对于n=k+1时,

n=k时结论成立,即

而将  和  拆开,会得到两个系数相等

 

的多项式,k次幂的项完全相等,将剩下的记为g(x)

 

因为n=k时结论成立,且g(x)最高次项不超过k-1次幂,即有,故 成立

 

由1.2得,此命题成立

 

 

那么如何快速判断一个数在A组还是B组?

,转化为二进制,显然与 中1的个数是不同奇偶的,而与也被分于两组,这意味着判断x在哪一组,即统计x-1在二进制下1的个数,时间复杂度O(qlogx)

 

可以用lowbit优化,不过加不加都可以过


原创粉丝点击