请求放宽时限
查看原帖
请求放宽时限
932039
lzy20091001楼主2024/3/30 18:02

在不用快读的情况下:

#include <iostream>

int a[5000005], s[5000005], sv[5000005], inv[5000005];

int qpow(int a, int b, int p)
{
    int res = 1;
    while (b != 0)
    {
        if (b & 1)
            res = 1ll * res * a % p;
        a = 1ll * a * a % p;
        b >>= 1;
    }
    return res;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    s[0] = 1;

    int n, p, k, ans = 0;

    std::cin >> n >> p >> k;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> a[i];
        s[i] = 1ll * a[i] * s[i - 1] % p;
    }

    sv[n] = qpow(s[n], p - 2, p);
    for (int i = n - 1; i >= 1; i--)
        sv[i] = 1ll * sv[i + 1] * a[i + 1] % p;
    for (int i = 1; i <= n; i++)
        inv[i] = 1ll * sv[i] * s[i - 1] % p;

    for (int i = 1, j = k; i <= n; i++, j = 1ll * j * k % p)
        ans = (ans + 1ll * j * inv[i]) % p;

    std::cout << ans << "\n";

    return 0;
}
#include <iostream>

int a[5000005], s[5000005] = {1}, sv[5000005], inv[5000005];

int qpow(int a, int b, int p)
{
    int res = 1;
    while (b != 0)
    {
        if (b & 1)
            res = 1ll * res * a % p;
        a = 1ll * a * a % p;
        b >>= 1;
    }
    return res;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    int n, p, k, ans = 0;

    std::cin >> n >> p >> k;
    for (int i = 1; i <= n; i++)
    {
        std::cin >> a[i];
        s[i] = 1ll * a[i] * s[i - 1] % p;
    }

    sv[n] = qpow(s[n], p - 2, p);
    for (int i = n - 1; i >= 1; i--)
        sv[i] = 1ll * sv[i + 1] * a[i + 1] % p;
    for (int i = 1; i <= n; i++)
        inv[i] = 1ll * sv[i] * s[i - 1] % p;

    for (int i = 1, j = k; i <= n; i++, j = 1ll * j * k % p)
        ans = (ans + 1ll * j * inv[i]) % p;

    std::cout << ans << "\n";

    return 0;
}

请求放宽时限。

2024/3/30 18:02
加载中...