hdu 4920 Matrix multiplication bitset优化常数
Posted xjhz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 4920 Matrix multiplication bitset优化常数相关的知识,希望对你有一定的参考价值。
Matrix multiplication
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Problem Description
Given two matrices A and B of size n×n, find the product of them.
bobo hates big integers. So you are only asked to find the result modulo 3.
bobo hates big integers. So you are only asked to find the result modulo 3.
Input
The input consists of several tests. For each tests:
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
The first line contains n (1≤n≤800). Each of the following n lines contain n integers -- the description of the matrix A. The j-th integer in the i-th line equals Aij. The next n lines describe the matrix B in similar format (0≤Aij,Bij≤109).
Output
For each tests:
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Print n lines. Each of them contain n integers -- the matrix A×B in similar format.
Sample Input
1
0
1
2
0 1
2 3
4 5
6 7
Sample Output
0
0 1
2 1
Author
Xiaoxu Guo (ftiasch)
Source
题意:给你两个矩阵,求矩阵相乘%3;
思路:正常思路n*n*n求解(运气好可以ac。。。),看了下数据范围由于mod=3,所以利用bitset标记每行1,2,0的位置,取并集就可以得到相同位置的个数;
这样就可以优化最后的一个n。详见代码;
#include<bits/stdc++.h> using namespace std; #define ll long long #define pi (4*atan(1.0)) #define eps 1e-14 const int N=1e3+10,M=1e6+10,inf=1e9+10; const ll INF=1e18+10,mod=2147493647; int n; bitset<N>a[N][5],b[N][5]; int ans(int i,int j) { int u=(a[i][1]&b[j][1]).count(),v=(a[i][1]&b[j][2]).count(); int x=(a[i][2]&b[j][1]).count(),y=(b[j][2]&a[i][2]).count(); return u+v*2+x*2+y*4; } int main() { while(~scanf("%d",&n)) { for(int i=0;i<n;i++) for(int j=0;j<=3;j++) a[i][j].reset(),b[i][j].reset(); for(int i=0; i<n; i++) for(int j=0; j<n; j++) { int x; scanf("%d",&x); a[i][x%3].set(j); } for(int i=0; i<n; i++) for(int j=0; j<n; j++) { int x; scanf("%d",&x); b[j][x%3].set(i); } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) printf("%d%c",ans(i,j)%3,(j!=n-1?‘ ‘:‘\n‘)); } } return 0; }
以上是关于hdu 4920 Matrix multiplication bitset优化常数的主要内容,如果未能解决你的问题,请参考以下文章
HDU 4920 Matrix multiplication(bitset)
hdu - 4920 - Matrix multiplication(缓存优化+开挂)
HDU4920 Matrix multiplication 矩阵
HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)