本题是Python快乐题,Java和C++选手被爆int坑的很惨~
首先考虑每个水晶都被翻倍过Q次(即总仪式次数)。对于每次仪式的指定编号x,则第x个水晶的实际翻倍次数减1。统计每个水晶最终被翻倍的次数,然后乘以2的那么多次方,再乘以其初始能量,求和取模。这里我们可以使用快速幂计算,并用取模运算防止溢出。
对于Python选手可以直接使用库函数pow,对应的复杂度也为logn
整体时间复杂度:O(nlogn)
有 N 个能量水晶排成一列,编号为 1 到 N,其中第 i 个水晶的初始能量为 Ai。
接下来会依次进行 Q 次能量强化仪式。每次仪式都需要指定一个水晶,该被指明的水晶在本轮中能量保持不变,而其余所有水晶的能量均会变为原来的两倍。
请你在所有仪式结束后,计算全部水晶的能量总和。由于结果可能很大,请将其对 10^9+7 取模后输出。
约束条件:
10^5。1 到 10^9 之间的整数。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.