【Codeforces专练-1500】

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;
}
上一篇:真香了!牛客网超火 1500 页 2021 最新大厂面试真题整理


下一篇:Zookeeper