题解 | 矩阵乘法计算量估算
矩阵乘法计算量估算
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]};
}
}
查看14道真题和解析