【bitset】hdu4920 Matrix multiplication

先把两个矩阵全都mod3。

S[i][j][k]表示第i(0/1)个矩阵的行/列的第k位是不是j(1/2)。

然后如果某两个矩乘对应位上为1、1,乘出来是1;

1、2:2;

2、1:2;

2、2:1。

然后分这四种情况把bitset and 起来,然后用count()数一下个数,计算下对答案矩阵该位置的贡献即可。

#include<cstdio>
#include<bitset>
using namespace std;
#define N 801
int n,x;
bitset<N>S[2][2][N];
int main()
{
	while(scanf("%d",&n)!=EOF)
	  {
	  	for(int i=1;i<=n;++i)
	  	  {
	  	  	S[0][0][i].reset();
	  	  	S[0][1][i].reset();
	  	  	S[1][0][i].reset();
	  	  	S[1][1][i].reset();
	  	  }
	  	for(int i=1;i<=n;++i)
	  	  for(int j=1;j<=n;++j)
	  	    {
	  	      scanf("%d",&x);
	  	      int op=x%3-1;
	  	      if(op!=-1) S[0][op][i][j]=1;
	  	    }
	  	for(int i=1;i<=n;++i)
	  	  for(int j=1;j<=n;++j)
	  	    {
	  	      scanf("%d",&x);
	  	      int op=x%3-1;
	  	      if(op!=-1) S[1][op][j][i]=1;
	  	    }
		for(int i=1;i<=n;++i)
	  	  for(int j=1;j<=n;++j)
	      	{
	      	  printf("%d",((S[0][0][i]&S[1][0][j]).count()+
	      	  ((S[0][0][i]&S[1][1][j]).count()<<1)+
	      	  ((S[0][1][i]&S[1][0][j]).count()<<1)+
	      	  (S[0][1][i]&S[1][1][j]).count())%3);
	      	  putchar(j==n?‘\n‘:‘ ‘);
	      	}
	  }
	return 0;
}
时间: 2024-10-25 02:49:16

【bitset】hdu4920 Matrix multiplication的相关文章

【LeetCode】Spiral Matrix II

Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]此题与Spiral Matrix类似,可以用相同的方法解决,相比之下,此题比前一题简单 publ

HDU4920 Matrix multiplication 矩阵

不要问我 为什么过了 窝也不造为什么就过了 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <malloc.h> #include <ctype.h> #include <math.h> #include <string> #include<iostream> #inclu

hdu4920 Matrix multiplication 模3矩阵乘法

hdu4920 Matrix multiplication Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 568    Accepted Submission(s): 225 Problem Description Given two matrices A and B of size n×n, find the product o

【Leetcode】Set Matrix Zeroes

Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. Could you devise a constant space solution? 思路:因为需要遍历整个矩阵,时间复杂度肯定需要O(m * n),对于空间复杂度而言,第一种是可以使用O(m * n),对每个位置的0的情况进行记录,第二种是使用O(m + n),对每行每列是否存在0进行记录,第三种是O(1)

【LeetCode】Set Matrix Zeroes 解题报告

今天看到CSDN博客的勋章换了图表,同时也增加显示了博客等级,看起来都听清新的,感觉不错! [题目] Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. click to show follow up. Follow up: Did you use extra space? A straight forward solution using O(mn) spac

【数组】Spiral Matrix II

题目: Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order. For example,Given n = 3, You should return the following matrix: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ] 思路: 本质上和上一题是一样的,这里我们要用数字螺旋的去填充矩阵.同理,我们也是逐个环

【动态规划】【滚动数组】【bitset】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem J. Terminal

有两辆车,容量都为K,有n(10w)个人被划分成m(2k)组,依次上车,每个人上车花一秒.每一组的人都要上同一辆车,一辆车的等待时间是其停留时间*其载的人数,问最小的两辆车的总等待时间. 是f(i,j)表示前i组,j个人是否可行.w(i)表示第i组的人数. if f(i,j)==1 then f(i+1,j+w(i+1))=1. 这是个bitset可以做的事情,每次左移以后或上f(i-1)的bitset即可.其实可以滚动数组. 然后每更新一次bitset,求一下其最左侧的1的位置,就是对于第一辆

【数组】Spiral Matrix

题目: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order. For example,Given the following matrix: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] You should return [1,2,3,6,9,8,7,4,5]. 思路: 逐个环的打印, 对于m *n的矩

【转载】The Matrix Cookbook

The Matrix Cookbook Kaare Brandt Petersen, Michael Syskind Pedersen Abstract Matrix identities, relations and approximations. A desktop reference for quick overview of mathematics of matrices. Keywords Matrix identity, matrix relations, inverse, matr