Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
43435 范墨涵 【J】T3 C++ 解答错误 90 284 MS 29612 KB 939 2026-10-29 16:37:41

Tests(9/10):


#include<bits/stdc++.h> using namespace std; #define int long long const int N = 1e6+10; int n,p; int a[N]; int sum[N]; int pre[N]; // pre[i]表示第i个往前最靠后的与它前缀和相等的下标 int f[N]; // f[i]表示1~i合并后的结果,f[i]=max(f[i-1],f[pre[i]]+1); signed main(){ //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); cin >> n >> p; for (int i=1;i<=n;i++){ cin>>a[i]; sum[i]=a[i]; sum[i]=(sum[i]+sum[i-1])%p; } memset (pre,-1,sizeof(pre)); for (int i=n;i>=2;i--){ for (int j=i-1;j>=1;j--){ if (sum[i]==sum[j]){ pre[i]=j; break; } } } if (sum[1]==0) f[1]=1; else f[1]=0; for (int i=2;i<=n;i++){ f[i]=f[i-1]; if (pre[i]==-1) continue; f[i]=max(f[i],f[pre[i]]+1); } cout << f[n]; return 0; }


测评信息: