hdu 4920 Matrix multiplication
呵呵呵,一开始傻啦吧唧想0,1,2三个数怎么bitset?!?!!
IQ--
开2个bitset
然后模拟矩阵乘法
1 #include<cstdio> 2 #include<algorithm> 3 #include<bitset> 4 #define N 1005 5 using namespace std; 6 inline int ra() 7 { 8 int x=0,f=1; char ch=getchar(); 9 while (ch<'0' || ch>'9') {if (ch=='-') f=-1; ch=getchar();} 10 while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();} 11 return x*f; 12 } 13 int n; 14 bitset<N> a1[N],a2[N],b1[N],b2[N]; 15 int main() 16 { 17 while (~scanf("%d",&n)) 18 { 19 for (int i=1; i<=n; i++) 20 { 21 a1[i].reset(); a2[i].reset(); 22 b1[i].reset(); b2[i].reset(); 23 } 24 for (int i=1; i<=n; i++) 25 for (int j=1; j<=n; j++) 26 { 27 int x=ra()%3; 28 if (x==1) a1[i][j-1]=1; 29 if (x==2) a2[i][j-1]=1; 30 } 31 for (int i=1; i<=n; i++) 32 for (int j=1; j<=n; j++) 33 { 34 int x=ra()%3; 35 if (x==1) b1[j][i-1]=1; 36 if (x==2) b2[j][i-1]=1; 37 } 38 for (int i=1; i<=n; i++) 39 for (int j=1; j<=n; j++) 40 { 41 int a=(a1[i]&b1[j]).count()+4*(a2[i]&b2[j]).count(); 42 int b=(a1[i]&b2[j]).count()+(a2[i]&b1[j]).count(); 43 if (j==n) printf("%d\n",(a+2*b)%3); 44 else printf("%d ",(a+b*2)%3); 45 } 46 47 } 48 }