2019暑假杭二day8测试总结

@(2019暑假杭二day8测试总结)

T1

题目大意

从前有一个国家,国力繁盛。然而众所周知,一旦一个国家强大了起来,那么这个国家一定会有许多奸臣想要上位。所以来进谏的人无论是谁,无论提出的是什么建议,都有可使国家走向灭亡。

郭紫丽现在就身处这个国家之中,但是她不希望国家出现这种情况。所以她希望给国王出主意。

然而旁边的大臣美国恶女同样也知道这个定律,所以她看到郭紫丽来进谏时,断定她一定是奸臣。

郭紫丽为了证明自己不是奸臣,就需要在智力上打败美国恶女。什么智力游戏呢?当然是下棋了。

美国恶女给出了一个n×m的棋盘,第i行第j列的格子上有一个生命值为\(a_{i,j}\), 的小兵。郭紫丽需要每次吸取一个小兵的生命值以提升自己的能力,但郭紫丽是一个有分寸的人,她不一定会把某个小兵的生命值全部吸完,但她至少会吸取一点。每次郭紫丽吸取完后,美国恶女也会进行一次同样的操作。

为了体现自己作为大臣的气度,美国恶女将游戏简化了一下。郭紫丽可以任意选取一行的小兵来进行这个游戏,也就是说,选好之后,每一个操作只能在这一行上进行。美国恶女又说,如果谁吸取了那一行最后一个小兵的最后一点生命值,那么这个人就会因为守护之力成为胜者。

郭紫丽当然不希望自己输掉,所以她会把棋盘上每一个小兵的生命值告诉你,希望你告诉她,有多少种选行的方式能够获得胜利。但为了不让自己作弊被发现,郭紫丽每次询问都会给出一个区间[l,r],你只能在第[l,r]行中选择。
Input
第一行,两个数n,m表示棋盘的大小。

第二行至第n+1 行,每行m个正整数,第i + 1行第j列上的数表示第i行第j列格子上小兵的生命值。第n+2 行,一个整数Q,表示询问或修改次数。

接下来 Q 行,每行第一个数是 opt ,表示操作编号。如果 opt = 1,后面跟着 2 个数 l,r 表示一次询问操作。如果 opt = 2,则后面跟着五个整数 x1,y1,x2,y2,p。表示将以(x1,y1)为左上角,(x2,y2)为右下角的矩形每个格子上的小兵的生命值都异或p。
Output
输出若干行。对于每一个 opt = 1,输出一个数,表示有多少行小兵能使郭紫丽一定获胜。
\(n\times m\le 100000,Q\le 100000\)

然而美国恶女也不希望郭紫丽那么容易就获得胜利,所以美国恶女会随时改变棋盘上兵的生命值。请你帮助郭紫丽解决这个问题。

sol

SG博弈,某一行能赢当且仅当这一行生命值xor起来为零。所以可以把n*m矩阵压缩成n行,操作相当于区间xor,区间查多少的数不为零。

nq暴力可以水过

正解是分块,设\(f[i][j]\)为第i块j出现过多少次,\(tag[i]\)为第i块的标记。修改时小块暴力,更改\(f\),大块打标记。查询时小块暴力,大块查询有多少个数等于\(tag\),可以算出有多少个0,总数减0数就是答案。

猜你喜欢

转载自www.cnblogs.com/hht2005/p/11402641.html
今日推荐