【百度之星2019】Strassen
【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=6719
在本题中,我们只有两种方法计算两个的矩阵的乘积,第一种为定义法,需要次乘法和次加法。第二种为Strassen分治法,仅当为偶数时可以使用,需要次加法以及再计算次大小为的矩阵的乘积。这次更小矩阵的乘积也可以选择两种方法之一计算。现假设计算机计算一次加法需要单位时间,计算一次乘法需要单位时间,其他任何操作不花费时间,问计算两个的矩阵的乘积至少需要多少时间。输出答案模的余数。
定义法: A * n * n * (n-1) + B * n * n * n
Strassen:A * ( n / 2 ) * ( n / 2 ) * ( n - 1 ) + 7 * Min (定义法(n/2),Strassen(n/2))
C++
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+;
ll A,B,x;
ll Matrix_Mul( ll n ){
n %= mod ;
ll t1 = B * n % mod * n % mod * n % mod ;
ll t2 = A * n % mod * n % mod * (n-) % mod ;
return ( t1%mod + t2%mod + mod ) % mod ;
} ll Strassen( ll n ){
if( n& )
return Matrix_Mul(n); if( n <= * A / (A+B) )
return Matrix_Mul(n); ll Half_n = n / ;
ll t1 = 18ll * Half_n % mod * Half_n % mod * A % mod ;
ll t2 = 7ll * Strassen( Half_n ) % mod ;
return ( t1 + t2 + mod ) % mod ;
}
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL) , cout.tie(NULL) ; int T;
cin >> T ;
while( T-- ){
cin >> x >> A >> B ;
cout << Strassen(x) << endl;
}
return ;
}
Java
import java.math.* ;
import java.util.*;
import java.security.MessageDigest;
public class Main{ static BigInteger Zero = new BigInteger ("");
static BigInteger One = new BigInteger ("");
static BigInteger Two = new BigInteger ("") ;
static BigInteger Four = new BigInteger ("") ;
static BigInteger Seven = new BigInteger ("");
static BigInteger Eighteen = new BigInteger ("") ;
static BigInteger Mod = new BigInteger(""); static BigInteger Martirx_Mul( BigInteger n , BigInteger a , BigInteger b ){
BigInteger Step1 = n.multiply(n).multiply(n).multiply(b) ;
BigInteger Step2 = n.subtract(One).multiply(n).multiply(n).multiply(a) ;
BigInteger Ans = Step1.add(Step2);
return Ans;
} static BigInteger Strassen( BigInteger x , BigInteger a , BigInteger b ){ if( x.equals(One) )
return Martirx_Mul( One , a , b ); BigInteger Half_x = x.divide(Two);
BigInteger Step1 = Eighteen.multiply( Half_x ).multiply(Half_x).multiply( a );
BigInteger Step2 = Seven.multiply( Strassen( Half_x , a ,b ).min(Martirx_Mul(Half_x,a,b)) ) ;
BigInteger Mul = Step1.add(Step2);
return Mul.min( Martirx_Mul(x,a,b) );
} public static void main( String[] args ){
Scanner cin = new Scanner(System.in);
int T = cin.nextInt();
while( T -- > ){
BigInteger a,b,n; n=cin.nextBigInteger();
a=cin.nextBigInteger();
b=cin.nextBigInteger();
BigInteger ans=Strassen(n,a,b).mod(Mod);
System.out.println(ans);
}
} }
【百度之星2019】Strassen的更多相关文章
- 百度之星2019第一场1002 Game
思路: 离散化之后dp,dp[i][j]表示完成前i个任务并且处在第j个点所需要的最小代价. 实现: #include <bits/stdc++.h> using namespace st ...
- 百度之星 2019 预赛三 A 最短路 1
题目链接 分析 异或运算满足「三角不等式」. $\forall a, b, c \in \mathbb{Z}_{\ge 0}$,有 $a \xor b \le (a \xor c) + (c \xor ...
- 2019 年百度之星·程序设计大赛 - 初赛四 1001 Strassen
比赛链接:2019 年百度之星·程序设计大赛 - 初赛四 题目链接:HDU-6719 Strassen C++ 没写出来 于是直接上 Java 暴力. 好像可以用 __int128. import j ...
- 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra
题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...
- 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)
Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- 2019 年百度之星 初赛一 1002 Game
传送门 Problem Description 度度熊在玩一个好玩的游戏.游戏的主人公站在一根数轴上,他可以在数轴上任意移动,对于每次移动,他可以选择往左或往右走一格或两格.现在他要依次完成 n 个任 ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
- 2016百度之星 资格赛ABCDE
看题:http://bestcoder.hdu.edu.cn/contests/contest_show.php?cid=690 交题:http://acm.hdu.edu.cn/search.php ...
- HDU 5690:2016"百度之星" - 初赛 All X
原文链接:https://www.dreamwings.cn/hdu5690/2657.html All X Time Limit: 2000/1000 MS (Java/Others) Mem ...
随机推荐
- Linux用户组
1.介绍 类似于角色,系统可以对有共性的多个用户进行统一的管理 2.增加组 groupadd 组名 3.删除组 groupdel 组名 4.增加用户时直接为用户指定组 useradd -g 用 ...
- JAVA基础知识|Serializable
一.序列化和反序列化 序列化:把对象转换为字节序列的过程称为对象的序列化. 反序列化:把字节序列恢复为对象的过程称为对象的反序列化. 将内存中对象的信息保存下来,可以有很多种方式实现这一功能.其中ja ...
- LeetCode 第 149 场周赛
成绩 一.一年中的第几天(LeetCode-1154) 1.1 题目描述 1.2 解题思路 比较容易的一题,搞清楚平年.闰年的判定规则,就很容易做出来. 1.3 解题代码 class Solution ...
- easyUI的datagrid表格的使用
实现easyUI表格的里面数据的增删改查功能.SQL使用Oracle和mybatis. 话不多说,直接上代码. 首先是前段部分的. var session = GetSession(); var pa ...
- MAC将根目录文件夹的权限赋给用户
https://my.oschina.net/liujiest/blog/762004 1.sudu -i进入root模式(需输入密码) 2.chown -R 用户名 /文件夹名 sudo -i Pa ...
- layui问题之模拟select点击事件
一.问题 不操作页面,实现模拟select的事件,即,自动出现下拉框,自动点击下拉框的值,select文本框的值随之改变 二.经过 刚开始查看layui官方文档,发现仅仅只是有select监听事件,即 ...
- Linux Bash Shell j简单入门
BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 ...
- LightGBM与评分卡
调参策略 最大化 off_ks + 0.8(off_ks-train_ks) import pandas as pd from sklearn.metrics import roc_auc_score ...
- python 了解一点属性的延迟计算
写在前面 本以为百度搜索这类知识的文章应该有很多, 然后我看了前面几篇后,基本上都是类似的内容,我想找些与众不同的博客看下,来拖宽这方面的广度,我就随机点到了第10页,结果第10页的内容基本跟属性的延 ...
- mysql中的sql-mode导致的datetime类型字段不能为0000
问题描述: 在执行建表语句的时候,出现invalid default datetime value '0000-00-00 00:00:00',从字面意思看,就是不合法的默认值'0000-00-00 ...