0
点赞
收藏
分享

微信扫一扫

acwing第42场周赛

木樨点点 2022-03-13 阅读 63
算法

1.最小值

4311. 最小值 - AcWing题库

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    double res=1e8;
    while (n -- )
    {
        double a,b;
        cin>>a>>b;
        res=min(res,a/b);
    }
    printf("%.6lf",m*res);
    return 0;
}

2.出现次数

4312. 出现次数 - AcWing题库

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
char s[N],t[N];
int ne[N];
int n,m,q;

void init()
{
    for(int i=2,j=0;i<=m;i++)
    {
        while(j&&t[i]!=t[j+1]) j=ne[j];
        if(t[i]==t[j+1]) j++;
        ne[i]=j;
    }
}
//t字符串和s的[l,r]部分进行kmp匹配
int kmp(int l,int r)
{
    int res=0;
    for(int i=l,j=0;i<=r;i++)
    {
        while(j&&s[i]!=t[j+1]) j=ne[j];
        if(s[i]==t[j+1]) j++;
        if(j==m)
        {
            res++;
            j=ne[j];
        }
    }
    return res;
}
int main()
{
    scanf("%d%d%d",&n,&m,&q);//输入字符串s的长度,字符串t的长度,询问次数
    scanf("%s",s+1);
    scanf("%s",t+1);
    init();
    while(q--)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        printf("%d\n",kmp(l,r));
    }
    return 0;
}

3.满二叉树等长路径

深度为n的满二叉树
每个边上都有权值
为了使得根节点到每个叶子结点的距离都相等
我们可以对边进行增加长度的操作
问最少增加多少长度,使得根节点到每个叶子结点的距离都相等

遍历到一个结点u,其左子树根节点为x(u<<1),右子树根节点为y(u<<1|1)
u到其左右子树根节点的距离分别是
d1=g[u][x]+x到根节点的距离
d2=g[u][y]+y到根节点的距离
所以让两者距离相等,需要加上abs(d1-d2)长度即可
更新完后,u到叶节点的路径长度hh[u]也要更新为max(x,y)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 1025<<2;//2的11次方-1再多加一点即可
int ans;
int g[N][N];//点与点间边的权重
int hh[N];//u结点到叶子节点的路径长度
int n;
int sum;
void dfs(int u)
{
    if(u>sum) return;
    dfs(u<<1);
    dfs(u<<1|1);
    int d1=g[u][u<<1]+hh[u<<1];
    int d2=g[u][u<<1|1]+hh[u<<1|1];
    ans+=abs(d1-d2);
    hh[u]=max(d1,d2);
}

int main()
{
    cin>>n;
    sum=(1<<(n+1))-1;
    for(int i=2;i<=sum;i++)
    {
        int x;
        cin>>x;
        g[i>>1][i]=x;
        g[i][i>>1]=x;
    }
    dfs(1);//dfs根节点
    cout<<ans<<endl;
    return 0;
}

 

 

 

举报

相关推荐

0 条评论