poj 3318 (矩阵乘积)

来源:互联网 发布:易凯软件价格 编辑:程序博客网 时间:2024/05/25 01:36

转换成一维矩阵的形式 O(n^2)

代码:

#include<stdio.h>#include<string.h>#define maxn 505int n;int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];int abd[maxn],bd[maxn],cd[maxn],d[maxn];void init(int m[][maxn]){    for(int i=1;i<=n;i++)      for(int j=1;j<=n;j++)        scanf("%d",&m[i][j]);}int main(){    //freopen("Input.txt","r",stdin);    int i,j;    while(~scanf("%d",&n))    {        init(a);init(b);init(c);        for(i=1;i<=n;i++)           d[i]=i;           memset(bd,0,sizeof(bd));           memset(cd,0,sizeof(cd));           memset(abd,0,sizeof(abd));        for(i=1;i<=n;i++)          for(j=1;j<=n;j++)          {              bd[i]+=b[i][j]*d[j];              cd[i]+=c[i][j]*d[j];          }        for(i=1;i<=n;i++)         for(j=1;j<=n;j++)           abd[i]+=a[i][j]*bd[j];        int flag=0;        for(i=1;i<=n;i++)          if(abd[i]!=cd[i])          {              flag=1;break;          }        if(flag==1) printf("NO\n");        else printf("YES\n");    }    return 0;}

如果对输入函数进行处理,时间会省掉1s;

代码:

#include<stdio.h>#include<string.h>#define maxn 505int n;int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];int abd[maxn],bd[maxn],cd[maxn],d[maxn];void in(int &m){    char ch;    int flag=0;    while((ch=getchar())<'0'||ch>'9')       if(ch=='-') flag=1;    for(m=0;ch>='0'&&ch<='9';ch=getchar())        m=m*10+ch-'0';    if(flag) m*=-1;}void init(int m[][maxn]){    for(int i=1;i<=n;i++)      for(int j=1;j<=n;j++)        in(m[i][j]);}int main(){    //freopen("Input.txt","r",stdin);    int i,j;    while(~scanf("%d",&n))    {        init(a);init(b);init(c);        for(i=1;i<=n;i++)           d[i]=i;           memset(bd,0,sizeof(bd));           memset(cd,0,sizeof(cd));           memset(abd,0,sizeof(abd));        for(i=1;i<=n;i++)          for(j=1;j<=n;j++)          {              bd[i]+=b[i][j]*d[j];              cd[i]+=c[i][j]*d[j];          }        for(i=1;i<=n;i++)         for(j=1;j<=n;j++)           abd[i]+=a[i][j]*bd[j];        int flag=0;        for(i=1;i<=n;i++)          if(abd[i]!=cd[i])          {              flag=1;break;          }        if(flag==1) printf("NO\n");        else printf("YES\n");    }    return 0;}



原创粉丝点击