问题链接: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;
}
};
没有登录极客极客的人看不到问题,所以很难说具体的事情。
但是假设
E[i]
将为 >= 0
并且看到 sum
和 E[i]
都小于 M
,则表达式 (sum-E[x-1]+M)
始终大于或等于 0
,而 ((sum%M)-(E[x-1]%M))
也可能会变成负值。根据 x%M
的负值 x
的结果(不同的编程语言对此有不同的解释),您可能会得到不同的结果。