您的位置:首页 > 其它

bzoj1228: [SDOI2009]E&D

2017-04-13 08:28 260 查看
传送门

SG函数

首先给sg函数打个表……发现0的分布好有规律

然后又发现1好像也挺规则的,一堆小三角型

最后发现每个数都是类似的三角形

发现如下规律:

0出现条件

i,j均%2=1

1出现条件

i%4=1,2

j%4=1,2

2出现条件

i,j%8=1,2,3,4

……

自己可以yy出得到sg(i,j)=k的必要条件

(i-1)%2k+1 < 2k且(j-1)%2k+1 < 2k

但是可能这对数满足很多条件,暴力找最小就可以了。

然后就愉快的水过了。

var
cases,test,n,i:longint;
ans,a,b:int64;
function sg(x,y:int64):int64;
var tmp,i:int64;
begin
tmp:=2; i:=0;
while ((x-1) mod tmp>=tmp/2) or ((y-1) mod tmp>=tmp/2) do
begin inc(i); tmp:=tmp*2; end;
exit(i);
end;
begin
read(cases);
for test:=1 to cases do begin
read(n); n:=n div 2; ans:=0;
for i:=1 to n do begin read(a,b); ans:=ans xor sg(a,b); end;
if (ans<>0) then writeln('YES') else writeln('NO');
end;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: