5057. 截断数组 求助!!
思路很简单,就是前缀和,看了半天代码,也看了题解,感觉没错,但总之6/10WA,大佬们帮帮忙!谢谢
#include<bits/stdc++.h>
#define IOS; ios :: sync_with_stdio(false);
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], ans = -1;
int main() {
IOS;
int n, p;
cin >> n >> p;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
b[i] = b[i - 1] + a[i];
}
for (int i = 1; i <= n; i ++) {
ans = max (((b[i] % p) + ((b[n] - b[i]) % p)), ans);
}
cout << ans << endl;
return 0;
}
int n, p; cin >> n >> p; for (int i = 1; i <= n; i++) { cin >> a[i]; sum[i] = (sum[i - 1] + a[i]) % p; } int res = 0; for (int i = 1; i < n; i++) res = max(sum[i] + ((sum[n] - sum[i]) % p + p) % p, res); cout << res << endl;
谢谢大佬
非空,<= 改成 <,还可能爆 int
谢谢大佬
第二个循环
谢谢大佬
i < n, 非空数组, i == n 时 b[n] - b[i] == 0, 即后一个区间为空
这个没事,反正是最大值
考试的时候一般不会想到这么做正确的严格证明, 根据题目要求做能保证正确
b[i]
爆int
了开
long long
ac了,谢谢大佬
AC代码:
#include[HTML_REMOVED]
using namespace std;
const int N=100010;
int a[N];
int main()
{
int n,p;
cin>>n>>p;
for(int i=1;i<=n;i)
{
cin>>a[i];
a[i]=(a[i]+a[i-1])%p;
}
int res=0;
for(int i=1;i<n;i)
{
res=max(res,a[i]+(a[n]-a[i]+p)%p);
}
cout<<res;
return 0;
}
谢谢大佬,已经ac了