[HNOI2001]矩阵乘积

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SSL_Yyx/article/details/82025760

题目描述

这里写图片描述

输入输出格式

输入格式:

第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

程序

#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

int x,y,n,m,o,p;
int a[6005],b[6005];
int i,j,c,i1,j1,c1;

int main(){
    cin>>x>>y;
    cin>>n>>m>>o>>p;
    cin>>i>>j>>c;
    while (true){
        if (i==x) a[j]=c;
        i1=i;   j1=j;   c1=c;
        cin>>i>>j>>c;
        if (i<i1 || i==i1 && j<=j1) break;
    }
    while (true){
        b[j]+=a[i]*c;
        i1=i;   j1=j;   c1=c;
        cin>>i>>j>>c;
        if (i<i1 || i==i1 && j<=j1) break;
    }
    for (int k=1;k<=6005;k++){
        a[k]=b[k];
        b[k]=0;
    }
    while(true){
        if (j==y) b[y]+=a[i]*c;
        i1=i; j1=j;c1=c;
        cin>>i>>j>>c;
        if (i<i1 || i==i1 && j<=j1) break;
    }
    cout<<b[y]<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/SSL_Yyx/article/details/82025760