大样例全过 60pts 求助
查看原帖
大样例全过 60pts 求助
551375
junxis楼主2022/3/21 21:48
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int mxN=3e5+5,mxK=1e6+5;
int n,m,k;
int a[mxN],C[mxK],pre[mxN];
ll S[mxN];
bool isqry[mxN];
int main()
{
	//freopen("1.in","r",stdin);
    cin>>n>>m>>k;
    for(int i=1,tmp;i<=m;i++)
	{
		scanf("%d",&tmp);
		isqry[tmp]=1;
	}
    for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		a[i]%=k;
		S[i]=S[i-1]+a[i];
	}
	pre[0]=0;
	for(int i=1;i<=n;i++) pre[i]=pre[i-1]+(isqry[i]&&S[i]%k==0);
	int ans=pre[n];
	for(int i=n;i>=1;i--)
	{
		int cur=pre[i-1]+C[S[i]%k];
		if(isqry[i]) C[S[i]%k]++;
		//printf("%d : %d\n",i,cur);
		ans=max(ans,cur);
	}//puts("");
	cout<<ans;
    return 0;
}

2022/3/21 21:48
加载中...