0%

2019 年百度之星·程序设计大赛 - 初赛四 1001 Strassen

比赛链接:2019 年百度之星·程序设计大赛 - 初赛四
题目链接:HDU-6719 Strassen

C++ 没写出来

于是直接上 Java 暴力。

好像可以用 __int128

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import java.util.*;
import java.math.*;

public class Main {
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
int T;
T = in.nextInt();
while(T > 0) {
T--;
BigInteger a, b, n;
n = in.nextBigInteger();
a = in.nextBigInteger();
b = in.nextBigInteger();
BigInteger ans = f(n, a, b);
BigInteger mod = new BigInteger("1000000007");
System.out.println(ans.remainder(mod));
}
}
public static BigInteger f (BigInteger n, BigInteger a, BigInteger b) {
BigInteger c = new BigInteger("18");
BigInteger d = new BigInteger("7");
BigInteger e = new BigInteger("2");
if((n).equals(BigInteger.ONE)) {
return b;
}
return ( ( (n.pow(3)).multiply(b) ).add( ((n.subtract(BigInteger.ONE)).multiply(n.pow(2))).multiply(a) ) ).min( ( (c.multiply( ((n.divide(e)).pow(2)) )).multiply(a) ).add( (d.multiply(f(n.divide(e), a, b))) ) );
}
}

欢迎关注我的其它发布渠道