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

矩阵乘法计算量估算

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

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n = in.nextInt();
        int[][]dataArray = new int[n][2];//[0,1,2][0,1]//
        for (int i = 0; i < n; i++) {
            dataArray[i][0] = in.nextInt();
            // System.out.println(dataArray[i][0]);
            dataArray[i][1] = in.nextInt();
            // System.out.println(dataArray[i][1]);
        }
        String partten = in.next();
        // System.out.println(partten);
        in.close();
        int sum = 0;
        int num = 0;
        int num1 = 0;
        char middle = 'a' ;
        int midNum = 0;
        int positionLow = 0;
        int positionUp = 0;
        int center = 0;
        char[] charray = new char[partten.length()];
        int pos = -1;
        for (int i = 0; i < partten.length(); i++) {
            if (partten.charAt(i) != ')') {
                charray[++pos] = partten.charAt(i);
            } else {
                if (center == 0) {
                    center++;
                    middle = charray[pos--];//start 的地方
                    midNum = middle - 'A';
                    positionUp = dataArray[midNum][1];
//                System.out.println("middle:"+middle);
                }

                char ch1 = charray[pos--];//pop是left  push 是right;
                if (ch1 == '(') {
                    charray[++pos]=('(');//最后位数补偿
                }
                char ch2 = charray[pos--];
//               System.out.println("position:"+charray.getPosition());
                if (ch1 == '(') {
                    sum += positionLow * dataArray[midNum][1] * positionUp;
                    // System.out.println("sum:" + sum);
                } else {
                    if (ch2 != '(') { //ch1=G ch2  =F;
                        num = ch1 - 'A';
                        num1 = ch2 - 'A';
                        positionUp = dataArray[num][1];
                        sum += dataArray[num1][0] * dataArray[num1][1] * positionUp ;
                        // System.out.println("sum1:" + sum);
                        char ss = charray[pos--];//
                    } else {
                        if (ch1 < middle) { //如果是左边
                            num = ch1 - 'A'; //num =1B
                            // System.out.println("ch1:" + ch1);
                            sum += dataArray[num][0] * dataArray[num][1] * positionUp;
                            positionLow = dataArray[num][0];
                            // System.out.println("sum0:" + sum);
                        } else {//如果是右边;
                            num = ch1 - 'A'; //0
                            sum += dataArray[num][0] * dataArray[num][1] * positionLow;
                            positionUp = dataArray[num][1];
                            // System.out.println("sum3:" + sum);
                        }
                    }

                }
                
            }




        }
        System.out.println(sum);
    }
}


全部评论

相关推荐

ResourceUt...:楼主有自己的垃圾箱,公司也有自己的人才库
点赞 评论 收藏
分享
LXXXXd:有点杂,想搞自动化的话没必要把法律的经历写上去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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