2014 Multi-University Training Contest 9#6
2014 Multi-University Training Contest 9#6
Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 424 Accepted Submission(s): 219
Problem Description
One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learning something about matrix, so he decided to make a crazy problem for her.
Bob has a six-faced dice which has numbers 0, 1, 2, 3, 4 and 5 on each face. At first, he will choose a number N (4 <= N <= 1000), and for N times, he keeps throwing his dice for K times (2 <=K <= 6) and writes down its number on the top face to make an N*K matrix A, in which each element is not less than 0 and not greater than 5. Then he does similar thing again with a bit difference: he keeps throwing his dice for N times and each time repeat it for K times to write down a K*N matrix B, in which each element is not less than 0 and not greater than 5. With the two matrix A and B formed, Alice’s task is to perform the following 4-step calculation.
Step 1: Calculate a new N*N matrix C = A*B.
Step 2: Calculate M = C^(N*N).
Step 3: For each element x in M, calculate x % 6. All the remainders form a new matrix M’.
Step 4: Calculate the sum of all the elements in M’.
Bob just made this problem for kidding but he sees Alice taking it serious, so he also wonders what the answer is. And then Bob turn to you for help because he is not good at math.
Input
The input contains several test cases. Each test case starts with two integer N and K, indicating the numbers N and K described above. Then N lines follow, and each line has K integers between 0 and 5, representing matrix A. Then K lines follow, and each line has N integers between 0 and 5, representing matrix B.
The end of input is indicated by N = K = 0.
Output
For each case, output the sum of all the elements in M’ in a line.
Sample Input
4 25 54 45 40 04 2 5 51 3 1 56 31 2 30 3 02 3 44 3 22 5 50 5 03 4 5 1 1 05 3 2 3 3 23 1 5 4 5 20 0
Sample Output
1456
问题:一开始的矩阵快速幂模板好像有点问题,改了之后还不对,原来是初始化的问题,又是没有初始化为0,导致加的时候出错。关键是它第一组是对的,后面就不对了,真实奇怪!
这一题思路还是很简单的,只是比赛的时候没去认真想。。。就去做其他题了。。。
(A*B)^1000*1000矩阵相乘,可以转化为A*(B*A)^(100*100-1)*B 运算次数减少很多,然后不要忘记是(1000*1000-1)
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <map>
#include <cstdlib>
#define M(a,b) memset(a,b,sizeof(a))
using namespace std;
const int SMod = ;
int N,K;
struct Matrix
{
int m[][];
};
Matrix Mul(Matrix a,Matrix b,int mm,int kk,int nn)
{
Matrix c;
memset(c.m,,sizeof(c.m));
for(int i=;i<mm;i++)
for(int j=;j<nn;j++)
for(int k=;k<kk;k++)
c.m[i][j] += (a.m[i][k]*b.m[k][j])% SMod, c.m[i][j]%=;
return c;
}
Matrix MPow(Matrix a,int n,int nn)
{
Matrix res;
memset(res.m,,sizeof(res.m));
for(int i = ;i<nn;i++)
res.m[i][i] = ;
while(n)
{
//cout<<n<<'!'<<endl;
if(n&)
res = Mul(res,a,nn,nn,nn);
n>>=;
a = Mul(a,a,nn,nn,nn);
}
return res;
}
int A[][],B[][],C[][],D[][];
int main()
{
while(scanf("%d%d",&N,&K)==&&N+K!=)
{
Matrix M,te;
M(M.m,);
M(te.m,);
M(A,);
M(B,);
M(C,);
M(D,);
for(int i = ;i<N;i++)
for(int j = ;j<K;j++)
{
scanf("%d",&A[i][j]);
}
for(int i = ;i<K;i++)
for(int j = ;j<N;j++)
{
scanf("%d",&B[i][j]);
}
for(int i=;i<K;i++)
for(int j=;j<K;j++)
for(int k=;k<N;k++)
M.m[i][j] += (B[i][k]*A[k][j])%SMod, M.m[i][j]%=SMod;
int ans = ;
te = MPow(M,N*N-,K);
for(int i=;i<N;i++)
for(int j=;j<K;j++)
for(int k=;k<K;k++)
C[i][j] += ((A[i][k]*te.m[k][j])%SMod + SMod) % SMod;
for(int i=;i<N;i++)
for(int j=;j<N;j++)
for(int k=;k<K;k++)
D[i][j] += ((C[i][k]*B[k][j])%SMod + SMod) % SMod;
for(int i = ;i<N;i++)
{for(int j = ;j<N;j++)
{
//cout<<D[i][j]%SMod<<' ';
ans+=D[i][j]%SMod;
}
//cout<<endl;
}
printf("%d\n",ans);
}
return ;
}
2014 Multi-University Training Contest 9#6的更多相关文章
- HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)
Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- 2014 Multi-University Training Contest 9#11
2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others) ...
- 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)
解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...
- 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)
解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...
- hdu 4937 2014 Multi-University Training Contest 7 1003
Lucky Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) T ...
- hdu 4941 2014 Multi-University Training Contest 7 1007
Magical Forest Time Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- hdu 4939 2014 Multi-University Training Contest 7 1005
Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/ ...
- hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...
随机推荐
- C#创建委托实例
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyDe ...
- struts2的拦截器(Interceptor)与过滤器(Filter)
一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...
- UVA11525 Permutation[康托展开 树状数组求第k小值]
UVA - 11525 Permutation 题意:输出1~n的所有排列,字典序大小第∑k1Si∗(K−i)!个 学了好多知识 1.康托展开 X=a[n]*(n-1)!+a[n-1]*(n-2)!+ ...
- jQuery中的width() innerWidth() outerWidth() outerWidth(true)的区别
width()仅仅包括content(内容) innerWidth()包括content(内容)和padding(补白) outerWidth()包括content(内容),padding(补白)和b ...
- k-develop 在ros上面的应用
sudo apt-get install kdevelop 根据wiki上面的ros 章节中,关于kdevelop的介绍,配置好环境即可. 导入工程时,选中src/src下面的章节,不过,需要注意去掉 ...
- SVN Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。
错误 1 Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符. 今天使用SVN进行更新的时候,出现了如上问题,想起卓 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
- JSX语法简介
React的核心机制之一就是可以在内存中创建虚拟的DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. JSX简介 JSX就是Javascript和XML结合的一种格式.Reac ...
- php $CI =& get_instance();
初学php 看有人这样写,$CI =& get_instance(); 要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个 ...
- Matlab
Q:workspace没有显示变量的值 A:这是因为子程序里的变量是局部变量,他们的作用域就是子函数内部,会在流程控制回到主调函数前被系统自动释放掉,所以,一旦子程序运行完,你是不可能再查看子程序里的 ...