[HNOI2001]矩阵乘积

该博客详细介绍了HNOI2001竞赛中关于矩阵乘积的问题,包括输入输出格式说明,具体的数据范围限制,并提供了若干输入输出样例,帮助理解题意。博主探讨了如何高效地计算大型矩阵的乘积,并可能涉及到了动态规划或高精度计算等算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

这里写图片描述

输入输出格式

输入格式:

第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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值