社区讨论

为什么WA两个点????

P1982[NOIP 2013 普及组] 小朋友的数字参与者 3已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi6ujhlz
此快照首次捕获于
2025/11/20 11:03
4 个月前
此快照最后确认于
2025/11/20 11:03
4 个月前
查看原帖
把n方改成了O(n),结果WA两个点,大佬们帮忙看一下
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL sum[1000100],n,p,a[1000100],te[1000100],sc[1000100],maxn=-99999999999,ans;
inline LL read(){
    LL x=0,k=1;
    char ch=getchar();
    while(ch<'0' || ch>'9'){
        if(ch=='-') k=-1;
        ch=getchar();
    }
    while(ch>='0' && ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*k;
}
int main(){
    int i,j,k;
    n=read(),p=read();
    for(i=1;i<=n;i++){
        k=read();
        if(sum[i-1]>0) sum[i]=sum[i-1]+k;
        else sum[i]=k;
        maxn=max(maxn,sum[i]);
        te[i]=maxn;
    }
    sc[1]=te[1];
    ans=sc[1];
    maxn=-9999999999;
    for(i=2;i<=n;i++){
        maxn=max(maxn,sc[i-1]+te[i-1]);
        sc[i]=maxn;
        if(ans<maxn) ans=maxn;
    }
    if(ans<0) printf("-%lld",abs(ans)%p);
    else printf("%lld",ans%p);
    return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...