返回题目问答
讨论 / 题目问答/ 帖子详情

怎么过不了的?哪里错了?

#include <iostream>
#include <vector>
using namespace std;
const int MOD = 1e9 + 7;


long long fast_pow(long long x, long long y, long long mod) {
    long long res = 1;
    while (y > 0) {
        if (y & 1) res = res * x % mod;  
        x = x * x % mod;  
        y >>= 1;  
    }
    return res;
}

int main()
{
    int n, q;
    cin >> n >> q;
    long long sum = 0;
    vector<long long>v(n);
    for (int i = 0; i < n; i++)
    {
        cin >> v[i];
        sum = (sum + v[i]) % MOD;
    }
    int l = 0, index;
    while(q--)
    {
        cin >> index;
        index--;

        //可能导致负数
        //sum = sum * 2 % MOD - fast_pow(v[index], 2 * l, 1e9+7);
        sum = (sum * 2 - v[index] * fast_pow(2, l, MOD) % MOD + MOD) % MOD;
        l++;
    }
    cout << sum;

    return 0;
}
0 回复 0 转发 0 喜欢 25 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!