为什么要在%MOD之前加上+MOD?

问题描述 投票:0回答:1

问题链接:https://practice.geeksforgeeks.org/contest/gfg-weekly-coding-contest-139/problems (第三个问题)

sum = (sum%M - E[x-1]%M)%M 或 sum = (sum-E[x-1])%M 不起作用,但是 sum = (sum-E[x-1]+M)%M 有效。

在 % Mod 之前+Mod 有什么好处?

class Solution {
  public:
    int MaximumEnergy(int n, vector<int> &E, int K, vector<int> &P) {
        
        // code here
        int M = 1e9+7;
        int ans = 0;
        for(int i = 1; i<n; i++) E[i] = (E[i]+E[i-1])%M;
        
        sort(P.begin(), P.end());
        for(int i = 0, j = K-1; i<K/2; i++){
            int x = P[i], y = P[j]; j--;
            int sum = E[y];


            if(x>0) sum = ((sum%M)-(E[x-1]%M))%M;
            // if(x>0) sum = (sum-E[x-1]+M)%M;


            ans = (ans+sum)%M;
        }
        return ans;
    }
};

c++17
1个回答
0
投票

没有登录极客极客的人看不到问题,所以很难说具体的事情。

但是假设

E[i]
将为
>= 0
并且看到
sum
E[i]
都小于
M
,则表达式
(sum-E[x-1]+M)
始终大于或等于
0
,而
((sum%M)-(E[x-1]%M))
也可能会变成负值。根据
x%M
的负值
x
的结果(不同的编程语言对此有不同的解释),您可能会得到不同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.