样例全过90分求助
查看原帖
样例全过90分求助
538459
dwhdwh楼主2022/7/29 11:15
#include<bits/stdc++.h>
using namespace std;
const int N=3e5;
int a[N],t[N],sum[N],o[N];
bool b[N];
int n,m,k,num,cnt,ans; 
int main()
{
//	freopen("sakura4.in","r",stdin);
	memset(b,0,sizeof(b));
	memset(o,0,sizeof(o));
	memset(t,0,sizeof(t));
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;++i)
	{
		int x;
		scanf("%d",&x);
		b[x]=true;
	}
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i]);
	cnt=0;
	for(int i=1;i<=n;++i)
	{
		cnt+=a[i];
		cnt%=k;
		if(!cnt&&a[i]&&b[i]) o[i]=o[i-1]+1;  
		else o[i]=o[i-1];//前i段开出樱之结界次数
		sum[i]=cnt;//第i段余数为cnt 
		if(b[i]&&a[i]) t[cnt]++;
	}
	ans=o[n];
	for(int i=1;i<=n;++i)
	{
		if(b[i]&&a[i]) t[sum[i]]--;
		ans=max(ans,o[i-1]+t[a[i]%k]);
	}
	printf("%d",ans);
	return 0;
}
2022/7/29 11:15
加载中...