CF2027E2.Bit Game (Hard Version)
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。唯一的区别在于,在本版本中你需要输出 Bob 获胜的游戏方案数,其中每堆石子的数量并不是固定的。你必须同时解决两个版本才能进行 hack。
Alice 和 Bob 正在玩一个熟悉的游戏,他们轮流从 n 堆石子中取石子。最初,第 i 堆有 xi 个石子,并且该堆有一个对应的值 ai。一名玩家可以从第 i 堆中取走 d 个石子,当且仅当满足以下两个条件:
- 1≤d≤ai,且
- x&d=d,其中 x 是当前第 i 堆的石子数,& 表示按位与运算。
无法进行操作的玩家判负,Alice 先手。
你已知每堆的 ai,但每堆的石子数 xi 尚未确定。对于第 i 堆,xi 可以是 1 到 bi 之间的任意整数(包含两端)。也就是说,你可以选择一个数组 x1,x2,…,xn,使得对所有堆都满足 1≤xi≤bi。
你的任务是统计在双方都采取最优策略的情况下,Bob 获胜的游戏方案数。若任意一堆的石子数不同,则认为是不同的游戏方案,即 x 数组中至少有一个位置不同。
由于答案可能非常大,请输出结果对 109+7 取模。
输入格式
每个测试点包含多组测试用例。第一行包含测试用例数 t(1≤t≤1000)。接下来是每组测试用例的描述。
每组测试用例的第一行包含一个整数 n(1≤n≤104),表示石子堆的数量。
第二行包含 n 个整数 a1,a2,…,an(1≤ai<230)。
第三行包含 n 个整数 b1,b2,…,bn(1≤bi<230)。
保证所有测试用例中 n 的总和不超过 104。
输出格式
输出一个整数,表示 Bob 获胜的游戏方案数,对 109+7 取模。
输入输出样例
输入#1
7 3 1 2 3 3 2 2 1 13 45 5 5 4 7 8 6 4 4 5 5 5 4 6 4 8 8 12 13 14 12 3 92856133 46637598 12345678 29384774 73775896 87654321 2 65 12 110 31 4 677810235 275091182 428565855 720629731 74522416 889934149 3394714 230851724
输出#1
4 4 0 6552 722019507 541 665443265
说明/提示
在第一个测试用例中,无论 x2 和 x3 取什么值,第二堆和第三堆都只能被操作一次,然后就无法再取石子了。如果 x1=2,那么无法从该堆取石子,因此最后一步由 Bob 完成。如果 x1=1 或 x1=3,则该堆可以被操作一次,因此最后一步由 Alice 完成。所以当 x=[2,1,1]、x=[2,1,2]、x=[2,2,1] 或 x=[2,2,2] 时,Bob 获胜。
在第二个测试用例中,当 x1=14 或 x1=30 时,Bob 可以通过取走 14−k 个石子获胜,其中 k 是 Alice 在她回合取走的石子数。当 x1=16 或 x1=32 时,Alice 一开始就无法进行操作,因此 Bob 获胜。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?