HDU4364----Matrix operation

来源:互联网 发布:虚拟机装不了linux系统 编辑:程序博客网 时间:2024/05/15 07:16

和矩阵乘法差不多,只是乘法改成了异或,然后按要求模拟就行了。

#include <stdio.h>#include <iostream>#include <algorithm>#define M 0xFF#define N 0x1Busing namespace std;int c[4][4],b[4][4];int a[4][4]={{2,3,1,1},{1,2,3,1},{1,1,2,3},{3,1,1,2}};void matrixmul(){int i,j,k;for(i=0;i<4;i++){for(j=0;j<4;j++){c[i][j]=0;for(k=0;k<4;k++){if(a[i][k]==1)c[i][j]^=(b[k][j]);else if(a[i][k]==2){int q=b[k][j]*2;if(q>M)q^=N;c[i][j]^=(q);}else{int q=b[k][j]*2;if((b[k][j]*2)>M)q^=N;c[i][j]^=(q^(b[k][j]));}}c[i][j]%=256;}}}int main(){int t,i,j;scanf("%d",&t);for(int k=0;k<t;k++){if(k!=0)printf("\n");for(i=0;i<4;i++){for(j=0;j<4;j++)scanf("%X",&b[i][j]);}matrixmul();for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%02X",c[i][j]);if(j!=3)printf(" ");elseprintf("\n");}}}return 0;}


原创粉丝点击