ubsequences Summing to Sevens S
题目链接:https://www.luogu.com.cn/problem/P3131
题意:
求是7的倍数的最长的区间长度
思路:
对于两个数a,b: (a-b)(mod m) = 0 => a (mod m) = b (mod m)
所以对于所有%7后的前缀区间,假设左边l点%7后等于右边r点%7,那么(pre[r]-pre[l]) (mod 7)=0
即为7的倍数区间
长度为最长的r-l
0最早出现在0位置
int vis[8];
void solve(){
int n;cin>>n;
vector<int>a(n+1);
vector<int>pre(n+1);
vector<int>p(n+1);
for(int i=0;i<7;i++){
vis[i]=-1;
}
for(int i=1;i<=n;i++){
cin>>a[i];
p[i]=p[i-1]+a[i];
pre[i]=p[i]%7;
}
int ans=0;
vis[0]=0;
for(int i=1;i<=n;i++){
if(vis[pre[i]]==-1)vis[pre[i]]=i;
else{
ans=max(ans,i-vis[pre[i]]);
}
}
cout<<ans<<endl;
}

浙公网安备 33010602011771号