Acwing第 45 场周赛【完结】

https://www.acwing.com/activity/content/competition/problem_list/1287/
最近开始补acwing周赛题目,鸽了好久了。最近acw分数一直再掉,感觉自己越来越烂了。

4393. 字符串价值【签到】

#include<bits/stdc++.h>
using namespace std;
int a[15];
int main(void)
{
    
    
    for(int i=0;i<4;i++) cin>>a[i];
    string s; cin>>s;
    int sum=0;
    for(int i=0;i<s.size();i++) sum+=a[s[i]-'0'-1];
    cout<<sum;
	return 0;
}

4394. 最长连续子序列【双指针】

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*5+10;
int n,m,a[N],st[N*10];
int l,r,ans;
int main(void)
{
    
    
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    int cnt=0;
    for(int i=0,j=0;i<n;i++)
    {
    
    
        st[a[i]]++;
        if(st[a[i]]==1) cnt++;
        while(cnt>m)
        {
    
    
            if(--st[a[j]]==0) cnt--;
            j++;
        }
        int len=i-j+1;
        if(len>ans) ans=len,l=j,r=i;
    }
    cout<<l+1<<" "<<r+1<<endl;
    return 0;
}

4395. 最大子矩阵【思维】

在这里插入图片描述

在这里插入图片描述
上图出自:https://www.acwing.com/solution/content/107506/
就是将其转换成线段的乘积。

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int N=2020;
LL a[N],b[N],s1[N],s2[N],len1[N],len2[N],n,m;
int main(void)
{
    
    
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i],s1[i]=s1[i-1]+a[i];
    for(int i=1;i<=m;i++) cin>>b[i],s2[i]=s2[i-1]+b[i];
    int x; cin>>x;
    for(int i=1;i<=n;i++)//枚举长度
    {
    
    
        len1[i]=1e9;
        for(int j=1;j+i-1<=n;j++)
        {
    
    
            int l=j,r=j+i-1;
            len1[i]=min(len1[i],s1[r]-s1[l-1]);
        }
    }
    for(int i=1;i<=m;i++)
    {
    
    
        len2[i]=1e9;
        for(int j=1;j+i-1<=m;j++)
        {
    
    
            int l=j,r=j+i-1;
            len2[i]=min(len2[i],s2[r]-s2[l-1]);
        }
    }
    int ans=0;
    for(int i=1;i<=n;i++)//双指针/二分也行 这里直接二层的for暴力
        for(int j=1;j<=m;j++)
            if(len1[i]*len2[j]<=x) ans=max(ans,i*j);
    cout<<ans;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46527915/article/details/124845999