zoukankan      html  css  js  c++  java
  • [HNOI2001]矩阵乘积

    题目描述

    输入输出格式

    输入格式:

    第1行为:x y (第1行为两个正整数:x,y分别表示输出结果所在的行和列)

    第2行为:m n o p(第2行给出的正整数表明A为m×n矩阵,B为n×o矩阵,C为o×p矩阵)

    第3行为:i j a(第3行以后的每一行有三个整数分别是矩阵的三元组表示法中的一个元素的值,每个矩阵之间有一个空行。表示的顺序是矩阵A、B和C)

    … … … … … …

    注:1≤m,n,o,p≤6000,三元数组的总个数不大于6000。数据之间用空格分开。

    输出格式:

    为 的第x行第y列元素的值。

    输入输出样例

    输入样例#1:
    1 2                       
    3 4 2 3
    1 1 3
    1 4 5
    2 2 1
    3 1 2
    
    1 2 2
    2 1 1
    3 1 2
    3 2 4
    
    1 2 2
    1 3 3
    2 1 1
    2 2 2
    
    输出样例#1:
    12
    只需要(x,y)的值
    ans(x,y)=∑B[x][k]*c[k][y]
    B[i][k]=∑a[i][p]*b[p][k]
    所以可以只求一部分的值
    输入部分用一种水法,还好数据弱
    如果前面输入(i,j),后面输入(a,b)
    (a,b)<(i,j) 则为另一矩阵
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 using namespace std;
     6 int m,n,o,p,x,y,A[6001],B[6001];
     7 int main()
     8 {int a,b,c,i,j,z;
     9   cin>>x>>y;
    10   cin>>m>>n>>o>>p;
    11   scanf("%d%d%d",&a,&b,&z);
    12   while (1)
    13     {
    14       if (a==x) A[b]=z;
    15       scanf("%d%d%d",&i,&j,&c);
    16       if (i<a||(i==a&&j<=b)) break;
    17       a=i;b=j;z=c;
    18     }
    19   a=i;b=j;z=c;
    20   while (1)
    21     {
    22       B[b]+=A[a]*z;
    23       scanf("%d%d%d",&i,&j,&c);
    24       if (i<a||(i==a&&j<=b)) break;
    25       a=i;b=j;z=c;
    26     }
    27   memcpy(A,B,sizeof(A));
    28   memset(B,0,sizeof(B));
    29   a=i;b=j;z=c;
    30   while (1)
    31     {
    32       if (b==y) B[b]+=A[a]*z;
    33       scanf("%d%d%d",&i,&j,&c);
    34       if (i<a||(i==a&&j<=b)) break;
    35       a=i;b=j;z=c;
    36     }
    37   cout<<B[y]<<endl;
    38 }


  • 相关阅读:
    性能
    .Net 平台下的互联网架构新思考
    bootstrap-paginator 分页插件笔记
    HTTP 报文中的 Header 字段进行身份验证
    .NET简单企业应用
    djngo快速实现--使用Bootstrap
    Knockout应用开发指南
    Linux下OpenCV的环境搭建(转)
    初识树莓派(转)
    网络名词解释
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7460216.html
Copyright © 2011-2022 走看看