题目链接

题意:给两个矩阵a, b, 计算矩阵a*b的结果对3取余。

分析:直接计算时间复杂度是O(n^3),会超时,但是下面第一个代码勉强可以水过,数据的原因。

 #include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <algorithm>
const int maxn = +;
using namespace std;
int n, a[maxn][maxn], b[maxn][maxn], c[maxn][maxn]; int main()
{
int i, j, k;
while(~scanf("%d", &n))
{
memset(a, , sizeof(a));
memset(b, , sizeof(b));
memset(c, , sizeof(c));
for(i = ; i < n; i++)
for(j = ; j < n; j++)
{
scanf("%d", &a[i][j]);
a[i][j] %= ;
}
for(i = ; i < n; i++)
for(j = ; j < n; j++)
{
scanf("%d", &b[i][j]);
b[i][j] %= ;
} for(i = ; i < n; i++)
{
for(k = ; k < n; k++)
if(a[i][k]!=)
for(j = ; j < n; j++)
{
c[i][j] += a[i][k]*b[k][j];
//c[i][j] %= 3; 加这个会超时
}
}
for(i = ; i < n; i++)
{
for(j = ; j < n; j++)
if(j == )
printf("%d", c[i][j]%);
else
printf(" %d", c[i][j]%);
printf("\n");
}
}
return ;
}

再贴一个崔老师的代码:

他把所有的0都忽略了,很巧妙的优化,aa[][], bb[][]里存储的是下一个不为0的位置:

 #include <iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
#define LL long long
#define gcd(a,b) (b==0?a:gcd(b,a%b))
#define lcm(a,b) (a*b/gcd(a,b))
//O(n)求素数,1-n的欧拉数
#define N 100010
//A^x = A^(x % Phi(C) + Phi(C)) (mod C)
int a[][];
int b[][];
int aa[][];
int bb[][];
int c[][];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,,sizeof(a));
memset(b,,sizeof(b));
memset(aa,,sizeof(aa));
memset(bb,,sizeof(bb));
memset(c,,sizeof(c));
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf("%d",&a[i][j]);
a[i][j]%=;
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf("%d",&b[i][j]);
b[i][j]%=;
}
}
for(int i=;i<=n;i++)
{
int x=-;
for(int j=n;j>=;j--)
{
aa[i][j]=x;
if(a[i][j])x=j;
}
}
for(int i=;i<=n;i++)
{
int x=-;
for(int j=n;j>=;j--)
{
bb[i][j]=x;
if(b[i][j])x=j;
}
}
for(int i=;i<=n;i++)
{
for(int j=aa[i][];j!=-;j=aa[i][j])
{
for(int k=bb[j][];k!=-;k=bb[j][k])
c[i][k]+=a[i][j]*b[j][k];
}
}
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
printf("%d",c[i][j]%);
if(j!=n)printf(" ");
else printf("\n");
}
}
}
return ;
}

最新文章

  1. C#测试运行时间
  2. MSSQL sp_helptextplus
  3. (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路
  4. Java Socket发送与接收HTTP消息简单实现
  5. HDOJ并查集题目 HDOJ 1213 HDOJ 1242
  6. oracle的常用函数
  7. Android(java)学习笔记127:Android Studio新建工程中的build.gradle、settings.gradle
  8. zoj 2100 Seeding
  9. input里面check 状态检测
  10. css中element element和element&gt;element选择器的区别
  11. ubuntu下编译内核驱动。
  12. 谷歌Chrome浏览器之No Sandbox
  13. zookeeper 分布式管理
  14. mongodb远程数据库的连接以及备份导入导出数据
  15. Ubuntu下提示U盘没有权限--只能读不能写
  16. 服务限流-令牌桶java实现
  17. zstack使用笔记之端口转发
  18. 搭建django虚拟环境完整步骤
  19. Unity3d-通过简单示例来理解Time.deltaTime
  20. Nuxeo 认证绕过和RCE漏洞分析(CVE-2018-16341)

热门文章

  1. Daily Scrum 11.6
  2. Azure VM 远程无法登陆问题(No Remote Desktop License)
  3. ExtJS4.2学习(21)动态菜单与表格数据展示操作总结篇2
  4. 【Asp.Net MVC】Avoid Mass Assignment in ASP.NET MVC
  5. NGUI Tutorial 3
  6. Unity3D脚本中文系列教程(十五)
  7. Openstack Quantum project 更名为 Neuron
  8. Thread的第三天学习
  9. IDEA建项目的正确姿势
  10. 素数筛法--SPOJ Problem 2 Prime Generator