POJ1068 Parencodings【用一个int变量作为栈】

简介:

 

Problem:1068   User: qq1203456195
Memory: 164K   Time: 0MS
Language: C   Result: Accepted

开始没读明白题的意思【鄙人英文太烂】,百度了题意,刚接触算法时间不长,没啥好想法,就想先根据q序列把()序列还原,然后再推w序列。

用了一个中午的时间把q序列还原成()了,然后就是推w序列。

既然是运算符匹配,肯定是栈了。又不想弄一个栈出来,怎么办呢?突然想到用一个变量就可以了,因为序列中只有(和非(两种情况,只要两类字符的数目抵消就是匹配完了。

复制代码
#include <stdio.h>
#include <string.h>
int main()
{
    int n,i,k,m,d,q,p,r,tk;
    char c[41];
    scanf("%d",&n);//n个case
    while (n--)
    {
        //构造()序列
        scanf("%d",&k);//q序列中k个元素

        memset(c,'(',sizeof(c));
        d=0;//(的数量
        q=0;//栈
        tk=k;//temp_k
        scanf("%d",&m);//q中的元素
        tk--;//读取一个就记录一个        
        for (i=0;i<2*k;i++)
        {
            if(d==m && c[i]=='(')//匹配
            {//确定Wi
                q=r=1;
                p=i-1;
                while(q&&p>=0)
                {
                    if (c[p]=='(')    
                        q--;//出栈
                    else
                    {
                        q++;//入栈
                        r++;//)的数量
                    }
                    p--;                    
                }
                c[i]=r+48;
                if(tk--)//读一个q中的元素
                    scanf("%d",&m);
            }
            if(c[i]=='(')
                d++;//统计(的数量                    
        }
        for (i=0;i<2*k-1;i++)
        {
            if(c[i]!='(')
                printf("%d ",c[i]-48);
        }
        printf("%d\n",c[i]-48);
    }
    return 1;
}
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/04/13/2446236.html,如需转载请自行联系原作者

相关文章
|
4月前
|
存储 编译器 程序员
learn_C_deep_4 (类型和变量命名、sizeof(int) *p表示什么意思、原码、反码和补码的概念、计算机中数据计算时,为什么要转为二级制、unsigned和signed关键字)
learn_C_deep_4 (类型和变量命名、sizeof(int) *p表示什么意思、原码、反码和补码的概念、计算机中数据计算时,为什么要转为二级制、unsigned和signed关键字)
|
4月前
|
存储 C语言
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
学习总结(位操作符;循环输入的三种方式;交换两个变量值的三种方法;打印数字对应的二进制;unsigned int 与int 的区别;改变特定位数0/1;&&和||的连续操作(与前置,后置结合))
33 0
|
5月前
|
存储 安全 程序员
【c语言】重温一下动态内存,int数组过大会造成栈错误
【c语言】重温一下动态内存,int数组过大会造成栈错误
45 0
|
10月前
|
存储 自然语言处理 Java
[oeasy]python0072_整数类型_int_integer_整型变量
[oeasy]python0072_整数类型_int_integer_整型变量
50 0
|
12月前
|
数据安全/隐私保护 C语言
【C语言】交换两个int变量的值,不能使用第三个变量
交换两个int变量的值,不能使用第三个变量。即a=3,b=5,交换之后 a=5,b=3
|
Java
变量的引入:int语句的使用
变量的引入:int语句的使用
74 0
|
测试技术
loadrunner 脚本开发-int型变量和字符串的相互转换
loadrunner 脚本开发-int型变量和字符串的相互转换
71 0
PHP 中,使用 (int) 或者 intval() 函数可以将变量转换为整数类型,区别是什么?底层原理是什么?
PHP 中,使用 (int) 或者 intval() 函数可以将变量转换为整数类型,区别是什么?底层原理是什么?
277 0
如何正确在NSMutableDictionary中加入一个变量int
如何正确在NSMutableDictionary中加入一个变量int
75 0
|
Java
编写Java程序,方法练习题__构建英雄类,定义一个int类型的变量output,表示英雄的血量
编写Java程序,方法练习题__构建英雄类,定义一个int类型的变量output,表示英雄的血量
228 0

热门文章

最新文章