HJ70 矩阵乘法计算量估算

140 阅读1分钟

image.png

const readline = require('readline')

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
})
let source = []
rl.on('line', function (line) {
    // source 是所有的输入
    source.push(line.trim())
})

rl.on('close', function () {
    // 删除矩阵的个数
    source.shift()
    let dict = 'ABCDEFGHIJKLMNO'
    // 矩阵乘法的规则
    let rule = source.pop()
    let idx = 0
    // 将规则按栈维护
    rule = rule.split('')
    let stack = []
    let res = 0
    for (let i = 0; i < rule.length; i++) {
        if (rule[i] === ')') {
            let b = stack.pop()
            let a = stack.pop()
            // 弹出括号
            stack.pop()
            // 累加结果
            res += a[0] * a[1] * b[1]
            // 封装新的值
            stack.push([a[0], b[1]])
        }
        // 判断有没有字母
        else if (/[A-Z]/.test(rule[i])) {
            // 有字母的话确定字母的位置
            idx = dict.indexOf(rule[i])
            // 拿到对应的矩阵,eg. 50 10
            stack.push(source[idx].split(' '))
        } else {
            // 规则是 ( 的时候
            stack.push(rule[i])
        }
    }
    console.log(res)
})