• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 7,comments - 3,trackbacks - 0

            Professor Maple teaches mathematics in a university. He have invented a function for the purpose of obtaining the operands from an expression. The function named op(i,e) can be described as follows: The expression e may be divided into sub-expression(s) by the operator, which has the lowest priority in the expression. For example, the expression “a*b+b*c+c*d” should be divided into three sub-expressions “a*b”, “b*c” and “c*d”, because the operator “+” has the lowest priority. The purpose of this function is to extract the ith sub-expression as the result. So, in the example above, op(2,e)=b*c.

            If we regard the sub-expression as the main expression, it might be divided again and again. Obviously, the dividing process is recursive. As you see, the following example is much more complex:

            Let p:=a^b*c+(d*c)^f*z+b
            op(1,op(1,op(2,p)))=(d*c)
            op(1,op(1,op(1,op(2,p))))=d*c
            op(2,op(2,p))=z
            op(3,p)=b
            op(1,op(3,p))=b

            Professor Maple is so lazy that he would leave the work to computer rather than do it himself, when the expression is long and complicated. Of course, without your program, the computer won’t work out the result automatically.

            Input

            The input file contains several test cases. The last test case in the input file is followed by a line containing a symbol “*”, indicating the end of the input data. Each test case consists of two parts. The first part describes the expression, while the second part contains several questions, which should be calculated according to the expression.

            The first line of each test case contains an expression consists of the expression name, “:=” and the content of the expression. The expression name is a lowercase. And the content is composed by lowercases and operators “+”, “(”, “)”, “*” and “^”. For example, here is a valid expression, p:=a^b*c+(d*c)^f*z+b. Among those operators, “(” and “)” have the highest priority. The operator “^” has a lower priority, and then “*”. The priority of the operator “+” is the lowest.

            The second line of each test case contains an integer n indicating n questions based on the above expression. This is followed by n lines. Each of them contains the description of one question, which consists of integers. For example, the question with three integers “2 1 1” describes the function op(1,op(1,op(2,e))). To compute this function, we have to keep to the following sequence: First, according to the first integer 2, divide the expression and extract the 2nd sub-expression. Then, according to the second integer 1, divide the sub-expression and extract the 1st one. Finally, according to the third integer 1, divide the outcome again, and extract the result.

            Output

            For each test case, display the expression name and a colon on the first line. Then display the result of each question on a line. The layout of the output is shown in the sample output.

            You may assume that all expressions and functions are always valid.

            Display a blank line between test cases.

            Sample Input

            p:=a^b*c+(d*c)^f*z+b 
            4
            2 1 1
            2 2
            3
            3 1
            a:=(x+y)
            3
            1
            1 2
            1 2 1
            *

            Sample Output

            Expression p: 
            op(1,op(1,op(2,p)))=(d*c)
            op(2,op(2,p))=z
            op(3,p)=b
            op(1,op(3,p))=b

            Expression a:
            op(1,a)=x+y
            op(2,op(1,a))=y
            op(1,op(2,op(1,a)))=y


            模擬題,處理好原字符串的優先級就行了。
            代碼:
            #include <iostream>
            #include 
            <cstring>
            #include 
            <cstdio>
            using namespace std;

            int find(char c)
            {
                
            if (c == '(' || c == ')'return 4;
                
            if (c == '^'return 3;
                
            if (c == '*'return 2;
                
            if (c == '+'return 1;
                
            return 1000;
            }

            char s[101];
            string e;
            int n, i, j, k, p[101], r[101], v[101], head, tail, x, ri, d = 0;

            int main()
            {
                
            while (scanf("%s", s), s[0!= '*')
                {
                    
            if (d++) puts("");
                    head 
            = 0;
                    e 
            = "";
                    
            while (s[head] != ':')
                      e 
            += s[head++];
                    head 
            += 2;
                    printf(
            "Expression %s:\n", e.c_str());
                    tail 
            = strlen(s) - 1;
                    x 
            = 0;
                    
            for (i = head; i <= tail; ++i)
                    {
                        
            if (s[i] == ')') x -= 4;
                        v[i] 
            = find(s[i]) + x;
                        
            if (s[i] == '(') x += 4;
                    }
                    scanf(
            "%d\n"&k);
                    
            for (i = 0; i < k; ++i)
                    {
                        ri 
            = 0;
                        
            int head1 = 3, min1, t;
                        tail 
            = strlen(s);
                        
            char c;
                        
            while ((c = getchar()) != '\n')
                        {
                            cin.putback(c);
                            scanf(
            "%d"&n);
                            r[ri
            ++= n;
                            min1 
            = 1000;
                            
            for (j = head1; j < tail; ++j)
                              
            if (v[j] < min1) min1 = v[j];
                            
            if (s[head1] == '(' && s[tail - 1== ')' && min1 == v[head1])
                            {
                                head1
            ++;
                                tail
            --;
                            }
                            
            else
                              
            if (head1 + 1 == tail){}
                            
            else
                            {
                                p[
            0= head1 - 1;
                                
            for (j = head1, t = 1; j < tail; ++j)
                                  
            if (v[j] == min1)
                                  {
                                      p[t
            ++= j;
                                  }
                                p[t] 
            = tail;
                                head1 
            = p[n - 1+ 1;
                                tail 
            = p[n];
                            }
                        }
                        
            for (j = ri - 1; j >= 0--j)
                          printf(
            "op(%d,", r[j]);
                        printf(
            "%s", e.c_str());
                        
            for (j = 0; j < ri; ++j)
                          printf(
            ")");
                        printf(
            "=");
                        
            for (j = head1; j < tail; ++j)
                            printf(
            "%c", s[j]);
                        puts(
            "");
                    }
                }
                
            return 0;
            }
            posted on 2011-10-25 19:53 LLawliet 閱讀(239) 評論(0)  編輯 收藏 引用 所屬分類: 模擬
            久久香综合精品久久伊人| 亚洲国产一成人久久精品| 久久精品一区二区三区中文字幕| 久久美女人爽女人爽| 久久免费视频6| 国内精品久久久久伊人av| 久久99热这里只有精品国产| 亚洲中文字幕无码久久2020| 91久久精品视频| 九九久久自然熟的香蕉图片| 无码乱码观看精品久久| 国内精品久久久久久久97牛牛| 久久久精品波多野结衣| 久久99国产亚洲高清观看首页| 尹人香蕉久久99天天拍| 久久久久免费视频| 一本伊大人香蕉久久网手机| 亚洲日本va中文字幕久久| 色播久久人人爽人人爽人人片aV| 久久99精品久久久久久| 精品久久久噜噜噜久久久| 久久久久久久免费视频| 欧美国产精品久久高清| 国产精品熟女福利久久AV| 久久国产精品一国产精品金尊| 久久久久亚洲av成人网人人软件| 久久中文字幕视频、最近更新| 久久精品这里热有精品| 91久久精品91久久性色| 久久久无码人妻精品无码| 亚洲伊人久久精品影院| 久久九九兔免费精品6| 久久综合亚洲鲁鲁五月天| 久久99九九国产免费看小说| 无码人妻少妇久久中文字幕| 亚洲七七久久精品中文国产| 久久亚洲日韩看片无码| 久久久无码精品亚洲日韩按摩| 热re99久久6国产精品免费| 精品久久久久久久久午夜福利| 人妻无码久久一区二区三区免费|