zoukankan      html  css  js  c++  java
  • hdu 1082, stack emulation, and how to remove redundancy 分类: hdoj 2015-07-16 02:24 86人阅读 评论(0) 收藏

    1. use fgets, and remove the potential ‘ ’ in the string’s last postion.
    2. (main point) remove redundancy
      there must be a stack, at first sight, you need a stack of type myNode, but think deeper, matrix multiplication is valid only if A.c=B.r, then the num of elementary multiplication is A.r*A.c*B.c, note that since A.c=B.r for every contiguous pair of matrices, so we can store the first matrix’s r and c, and for the rest, we first check validation, if error, break, else just store B.c, the B.r is not to been stored, thus remove redundancy.
      //
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    #define MAXSIZE 1000
    struct myNode{ int r,c; };
    
    int main() {
    #ifndef ONLINE_JUDGE
        freopen("in.txt","r",stdin);
    #endif
        int n,i,ch,len,iserror,res, stk[MAXSIZE];
        char buf[MAXSIZE], *p;
        myNode matrices[26], *mat=matrices-'A';
        scanf("%d
    ",&n);
        if(n<=0) return -1;
        for(i=0;i<n;++i) {
            ch=getchar();
            scanf("%d%d
    ",&mat[ch].r,&mat[ch].c);
        }
        while(fgets(buf,MAXSIZE,stdin)) {
            len=strlen(buf);
            if(buf[len-1]='
    ') buf[--len]=0;
            for(res=0,iserror=0, p=buf+1;*p!=0 && *p=='(';++p) {}
            if(*p!=0) {
                stk[0]=mat[*p].r, stk[1]=mat[*p].c;
                for(len=1, ++p;*p!=0;++p) {
                    if(*p=='(') continue;
                    else if(*p==')') {
                        --len;
                        res+=stk[len-1]*stk[len]*stk[len+1];
                        stk[len]=stk[len+1];
                    }
                    else {
                        if(mat[*p].r!=stk[len]) { iserror=1; break; }
                        stk[++len]=mat[*p].c;
                    }
                }
                while(len>1) {
                    --len;
                    res+=stk[len-1]*stk[len]*stk[len+1];
                    stk[len]=stk[len+1];
                }
            }
            if(iserror) puts("error");
            else printf("%d
    ",res);
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。// p.s. If in any way improment can be achieved, better performance or whatever, it will be well-appreciated to let me know, thanks in advance.

  • 相关阅读:
    二叉搜索查找排序树
    多项式运算
    赫夫曼编码及应用
    利用python画出动态高优先权优先调度
    利用python画出SJF调度图
    支持向量机
    fisher线性分类器
    Codeforces Round #520 (Div. 2)
    Codeforces Round #510 (Div. 2)
    Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)
  • 原文地址:https://www.cnblogs.com/qeatzy/p/4716217.html
Copyright © 2011-2022 走看看