1400-1500
Codeforces Round #741 (Div. 2) C. Rings
1600-1700
Codeforces Round #515 (Div. 3) E. Binary Numbers AND Sum
思路:对s2求前缀和,倒着遍历s1的字符串,当前遍历到i,是1的话,ans就加上i到l2的和(直接用前缀和)再乘以当前位的十进制贡献
Codeforces Round #518 (Div. 1) [Thanks, Mail.Ru!] A. Array Without Local Maximums
思路:
要求小于等于x的最大面积,我们可以用俩前缀和维护出,每个长度的最小值,两个数组相乘,值相加,就是每个面积的最小值。最后枚举长度,找到小于等于x的最大面积
ll a[N],b[N]; ll mina[N],minb[N];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i],a[i]+=a[i-1];
for(int i=1;i<=m;i++)cin>>b[i],b[i]+=b[i-1];
int cnta=0,cntb=0;
memset(mina,INF,sizeof mina);
memset(minb,INF,sizeof minb);
for(int i=1;i<=n;i++){
for(int j=0;j<=i-1;j++){
mina[i-j] = min(mina[i-j],a[i]-a[j]);
}
}
for(int i=1;i<=m;i++){
for(int j=0;j<=i-1;j++){
minb[i-j] = min(minb[i-j],b[i]-b[j]);
}
}
ll ans=0;
ll x; cin>>x;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mina[i]*minb[j]<=x) ans = max(ans,(ll)i*j);
}
}
cout<<ans<<endl;
return 0;
}