zoukankan      html  css  js  c++  java
  • UVA442 矩阵链乘

    UVA442 矩阵链乘

    字符输入在第一个位置和最后一个位置都很恶心!

    题目详情

    题目链接

    解题思路

    此题重点在于理解表达式的递归调用,即:

    [SecondPart = Line { Line } <EOF>\ Line = Expression <CR>\ Expression = Matrix | "(" Expression Expression ")"\ Matrix = "A" | "B" | "C" | ... | "X" | "Y" | "Z"\ ]

    #include<iostream>
    #include<vector>
    #include<cstdio>
    #include<string>
    #include<stack>
    using namespace std;
    
    vector<pair<int, int>> mp(26, pair<int, int> (0, 0));
    
    void fun() {
        char ch[100];
        int arr[100];
        for (int i = 0; i < 20; i++) arr[i] = ch[i] - '0';
    }
    
    int main() {
        int n, r, c;
        string name;
        string expr;
        scanf("%d", &n);
        
        while (n --) {
            cin >> name;
            scanf("%d%d", &r, &c);
            mp[name[0] - 'A'] = make_pair(r, c);
        }
        while (cin >> expr) {
            stack<pair<int, int>> stk;
            bool error = false;
            int ans = 0;
            for (int i = 0; i < expr.size(); i++) {
                if (isalpha(expr[i])) stk.push(mp[expr[i] - 'A']);
                else if (expr[i] == ')') {
                    pair<int, int> m1, m2;
                    m2 = stk.top(); stk.pop();
                    m1 = stk.top(); stk.pop();
                    if (m1.second != m2.first) {
                        error = true;
                        break;
                    } else ans += m1.first * m1.second * m2.second;
                    stk.push(make_pair(m1.first, m2.second));
                }
            }
            if (error) printf("error
    ");
            else printf("%d
    ", ans);
        }
        return 0;
    }
    
  • 相关阅读:
    electron入坑指南
    记CSS格式化上下文
    Ruby安装Scss
    向量
    产生指定范围的随机数
    纯CSS 图片演示
    socket 函数
    C++网络套接字编程TCP和UDP实例
    技巧收藏
    伤心啊
  • 原文地址:https://www.cnblogs.com/mayapony/p/14015925.html
Copyright © 2011-2022 走看看