⭐⭐⭐ 当s[r]和s[l−1]模7相同时,区间就能被7整除
因为这是前缀和
妙!!!
这个题必须得提前%7来判断,否则会超时
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N=100010; int n,a,s,r[N],l[N],ans; int main(){ memset(l,-1,N);//把数组变成{0,-1,-1,-1,-1,-1,......}的样子 l[0]=0; cin>>n; for(int i=1;i<=n;++i) { cin>>a; s=(s+a)%7; if(l[s]==-1)l[s]=i;//如果s=(s+a)%7=0,那么r[0]=i,否则l[s]=i r[s]=i; } for(int i=0;i<7;++i) { if(l[i]!=-1) { ans=max(ans,r[i]-l[i]); } } cout<<ans; }
对于数组设置成{0,-1,-1,-1……}的样子,刚开始我是弄成了l[N]={-1}
但是不对,我以为这样就能把数组里面的数全部初始化为-1了
但是后来恍然大悟(暗藏玄只因),这样子的意思是第N+1个数为-1,其他的还是0
所以得用memset(因为之前以为memset函数没什么用)
Code over!