题解 | 矩阵乘法计算量估算

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

import java.util.Scanner;

import java.util.concurrent.atomic.* ;


// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        int mc = in.nextInt();
        int[][] m = new int[mc][2];
        int i = 0;
        while(i++ < mc) {
            int r = in.nextInt();
            int c = in.nextInt();
            m[i-1] = new int[]{r,c};
        }
        String str = in.next();
        // System.out.println(m[2][1]+","+str);
        AtomicInteger acc = new AtomicInteger();
        calc(str, m, acc, new AtomicInteger());
        System.out.println(acc.get());

    }

    static int[] calc(String str, int[][] m, AtomicInteger acc, AtomicInteger len) {
        int[] res = new int[]{1,1};
        // System.out.println(">>"+str);
        for(int i=0;i<str.length();i++) {
            if (str.charAt(i) == '(') {
                // int l = str.lastIndexOf(")");
                AtomicInteger sublen = new AtomicInteger();
                int [] tmp = calc(str.substring(i+1), m, acc, sublen);
                res = mul(res, tmp, acc);
                i = i + sublen.get();
                continue;
            }
            if (str.charAt(i) == ')') {
                len.set(i+1);
                return res;
            }
            int [] tmp = m[str.charAt(i) - 'A'];
            res = mul(res, tmp, acc);
        }
        return res;
    }

    static int[] mul(int [] a, int []b, AtomicInteger acc) {
        if (a[0]==1&&a[1]==1) return b;
        if (b[0]==1&&b[1]==1) return a;
        acc.addAndGet(a[0]*a[1]*b[1]);
        return new int[]{a[0],b[1]};
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务