码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1082

时间:2014-10-22 12:16:22      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

http://acm.hdu.edu.cn/showproblem.php?pid=1082

这题开始想复杂了,error并不包括表达式本身不合法的情况

我的方法是遇到右括号就开始处理栈,如果开始最外层没有括号,就人为加上

数据应该是比较弱的,一通乱搞

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>

using namespace std ;
int n ;

struct Mat
{
    int op ;
    int r,c ;
}M[30000] ;
Mat cc[1005] ;
char s[10005],ss[10005] ;
int main()
{
    scanf("%d",&n) ;
    for(int i=0 ;i<n ;i++)
    {
        char op[5] ;
        scanf("%s%d%d",op,&M[i].r,&M[i].c) ;
        M[i].op=op[0] ;
    }
    int tt=n ;
    while(~scanf("%s",s))
    {
        n=tt ;
        int len=strlen(s) ;
        if(s[0]!=()
        {
            for(int i=1 ;i<=len ;i++)
                ss[i]=s[i-1] ;
            ss[0]=( ;ss[len+1]=) ;
            len+=2 ;
            for(int i=0 ;i<len ;i++)
                s[i]=ss[i] ;
        }
        int flag=0 ;
        for(int i=0 ;i<len ;i++)
        {
            if(s[i]==( || s[i]==))
            {
                flag=1 ;
                break ;
            }
        }
        int ans=0 ;
        int ct=255 ;
        stack <int> st ;
        flag=1 ;
        for(int i=0 ;i<len ;i++)
        {
            if(s[i]!=))
            {
                st.push(s[i]) ;
            }
            else 
            {
                int cnt=0 ;
                while(1)
                {
                    if(st.empty())break ;
                    if(st.top()==()
                    {
                        st.pop() ;
                        break ;
                    }
                    int temp=st.top() ;
                    st.pop() ;
                    for(int j=0 ;j<n ;j++)
                    {
                        if(M[j].op==temp)
                        {
                            cc[cnt++]=M[j] ;
                            break ;
                        }
                    }
                }
                for(int j=cnt-2 ;j>=0 ;j--)
                {
                    if(cc[j+1].c==cc[j].r)
                    {
                        ans+=(cc[j+1].r*cc[j+1].c*cc[j].c) ;
                    }
                    else
                    {
                        flag=0 ;
                        break ;
                    }
                    cc[j].r=cc[j+1].r ;
                }
                if(!flag)break ;
                cc[0].op=ct++ ;
                M[n++]=cc[0] ;
                st.push(cc[0].op) ;
            }
            if(!flag)break ;
        }
        if(flag)printf("%d\n",ans) ;
        else puts("error") ;
    }
    return 0 ;
}
View Code

 

HDU 1082

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/xiaohongmao/p/4042528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!