算法学习之路|POJ 1068 Parencodings(简单模拟)

简介: 有一个括号串(括号成对),给出一串数字数组p,p[i]表示从左往右第i个右括号左边共有p[i]个左括号,求一个数组w,w[i]表示第i个右括号和其所匹配的左括号之间有多少个左括号(包括这个左括号本身)

题目大意:

有一个括号串(括号成对),给出一串数字数组p,p[i]表示从左往右第i个右括号左边共有p[i]个左括号,求一个数组w,w[i]表示第i个右括号和其所匹配的左括号之间有多少个左括号(包括这个左括号本身)

一个例子:

括号串:    (((()()())))

P 4 5 6 6 6 6

W 1 1 1 4 5 6

思路

用一个vis数组标标记,1表示左括号,0表示右括号,模拟出w数组时用2标记已经用过的左括号,-1标记已经用过的右括号

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define maxn 100
int main()
{
    int p[maxn],w[maxn],vis[maxn];
    int t,n,index,ww;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        memset(vis,0,sizeof(vis));
        memset(w,0,sizeof(w));
        index=1;//标记vis数组
        ww=1;
        p[0]=0;
        w[0]=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&p[i]);
            int temp=p[i]-p[i-1];
            for(int j=1;j<=temp;j++)
            {
                vis[index++]=1;
            }
            index++;
        }
        for(int i=1;i<=n*2;i++)//输入数字有n个,说明括号有n对,因此vis数组有2n的长度
        {
            int index2=1;//标记w数组
            if(vis[i]==0)
            {
                vis[i]=-1;
                int x=i;
                while(vis[x]!=1)
                {
                    if(vis[x]==2)
                    {
                        index2++;
                    }
                    x--;
                }
                w[ww++]=index2;
                vis[x]=2;
            }
        }
        for(int i=1;i<=n;i++)
        {
            printf("%d",w[i]);
            if(i<n)
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

就是简单模拟,没有坑。

目录
相关文章
|
1天前
|
机器学习/深度学习 算法
应用规则学习算法识别有毒的蘑菇
应用规则学习算法识别有毒的蘑菇
|
12天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
12天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】集成学习算法的原理与应用
【4月更文挑战第30天】集成学习通过组合多个基学习器提升预测准确性,广泛应用于分类、回归等问题。主要步骤包括生成基学习器、训练和结合预测结果。算法类型有Bagging(如随机森林)、Boosting(如AdaBoost)和Stacking。Python中可使用scikit-learn实现,如示例代码展示的随机森林分类。集成学习能降低模型方差,缓解过拟合,提高预测性能。
|
25天前
|
机器学习/深度学习 算法 前端开发
Scikit-learn进阶:探索集成学习算法
【4月更文挑战第17天】本文介绍了Scikit-learn中的集成学习算法,包括Bagging(如RandomForest)、Boosting(AdaBoost、GradientBoosting)和Stacking。通过结合多个学习器,集成学习能提高模型性能,减少偏差和方差。文中展示了如何使用Scikit-learn实现这些算法,并提供示例代码,帮助读者理解和应用集成学习提升模型预测准确性。
|
26天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
22 0
|
27天前
|
算法 安全 数据可视化
python关联规则学习:FP-Growth算法对药品进行“菜篮子”分析
python关联规则学习:FP-Growth算法对药品进行“菜篮子”分析
|
1月前
|
算法
【算法学习--字符串】(不含KMP算法)
【算法学习--字符串】(不含KMP算法)
|
2月前
|
机器学习/深度学习 算法 数据挖掘
什么是集成学习算法
什么是集成学习算法
36 0
|
2月前
|
Rust Dart 算法
55.3k star!开源算法教程,附带动画图解,学习算法不再苦恼!
55.3k star!开源算法教程,附带动画图解,学习算法不再苦恼!
|
2月前
|
算法 C++ 计算机视觉
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法
Opencv(C++)学习系列---Laplacian拉普拉斯边缘检测算法