WA 45 分求调,猜测可能是取模的问题
查看原帖
WA 45 分求调,猜测可能是取模的问题
932039
lzy20091001楼主2024/4/9 00:33

https://www.luogu.com.cn/record/154980060

#include <iostream>
#include <algorithm>

const int MOD = 1e9 + 7;

int x[500005], y[500005];

int sum1(int n)
{
    return 1ll * n * (n + 1) / 2 % MOD;
}

int sum2(int n)
{
    if (n % 3 == 0)
        return 1ll * n / 3 * (n + 1) / 2 % MOD * (2 * n + 1) % MOD;
    return 1ll * n * (n + 1) / 2 % MOD * (2 * n + 1) / 3 % MOD;
}

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

    int n, m, k;
    long long f, ans = 0;

    std::cin >> n >> m >> k;
    for (int i = 1; i <= k; i++)
        std::cin >> x[i] >> y[i];

    ans += 1ll * m * m % MOD * n % MOD * sum1(n - 1) % MOD;
    ans -= 1ll * m * m % MOD * sum2(n - 1) % MOD;
    ans += 1ll * n * n % MOD * m % MOD * sum1(m - 1) % MOD;
    ans -= 1ll * n * n % MOD * sum2(m - 1) % MOD;
    ans = (ans % MOD + MOD) % MOD;

    for (int i = 1; i <= k; i++)
    {
        ans -= 1ll * m * sum1(x[i] - 1) % MOD;
        ans -= 1ll * m * sum1(n - x[i]) % MOD;
        ans -= 1ll * n * sum1(y[i] - 1) % MOD;
        ans -= 1ll * n * sum1(m - y[i]) % MOD;
        ans = (ans % MOD + MOD) % MOD;
    }

    f = 0;
    std::sort(x + 1, x + k + 1);
    for (int i = 2; i <= k; i++)
    {
        f += 1ll * (i - 1) * (x[i] - x[i - 1]) % MOD;
        f %= MOD;
        ans += f;
        ans %= MOD;
    }
    f = 0;
    std::sort(y + 1, y + k + 1);
    for (int i = 2; i <= k; i++)
    {
        f += 1ll * (i - 1) * (y[i] - y[i - 1]) % MOD;
        f %= MOD;
        ans += f;
        ans %= MOD;
    }

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

    return 0;
}
2024/4/9 00:33
加载中...