CCF认证202305-2矩阵运算(C语言版)

这篇具有很好参考价值的文章主要介绍了CCF认证202305-2矩阵运算(C语言版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

试题编号: 202305-2
试题名称: 矩阵运算
时间限制: 5.0s
内存限制: 512.0MB
问题描述:

题目背景

 是 Transformer 中注意力模块的核心算式,其中 、 和  均是  行、列的矩阵, 表示矩阵  的转置, 表示矩阵乘法。

问题描述

为了方便计算,顿顿同学将  简化为了点乘一个大小为  的一维向量 :
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        
点乘即对应位相乘,记  为向量  的第  个元素,即将  第  行中的每个元素都与  相乘。

现给出矩阵 、 和  和向量 ,试计算顿顿按简化的算式计算的结果。

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数  和 ,表示矩阵的大小。

接下来依次输入矩阵 、 和 。每个矩阵输入  行,每行包含空格分隔的  个整数,其中第  行的第  个数对应矩阵的第 ​​​​​​​行、第  列。

最后一行输入  个整数,表示向量 。

输出格式

输出到标准输出中。

输出共  行,每行包含空格分隔的  个整数,表示计算的结果。

样例输入

3 2
1 2
3 4
5 6
10 10
-20 -20
30 30
6 5
4 3
2 1
4 0 -5

Data

样例输出

480 240
0 0
-2200 -1100

Data

子任务

 的测试数据满足: 且  ;输入矩阵、向量中的元素均为整数,且绝对值均不超过 。

全部的测试数据满足: 且 ;输入矩阵、向量中的元素均为整数,且绝对值均不超过 。

提示

请谨慎评估矩阵乘法运算后的数值范围,并使用适当数据类型存储矩阵中的整数。

代码一:(强制类型转换)

#include "stdio.h"
long long a[30][30];
long long f[10010][30];
int main(){
    int n,d;
    int Q[10010][30],K[10010][30],V[10010][30];
    int W[10010];
    scanf("%d %d",&n,&d);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&Q[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&K[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&V[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        scanf("%d",&W[i]);
    }
    for (int i = 0; i < d; ++i) {
        for (int j = 0; j < d; ++j) {
            for (int k = 0; k < n; ++k) {
                a[i][j]+=(K[k][i]*V[k][j]);
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            for (int k = 0; k < d; ++k) {
                f[i][j]+=(a[k][j]*Q[i][k]);
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            f[i][j]*=(long long)W[i];
        }
    }
    for (int i = 0; i < n; ++i) {
        printf("%lld",f[i][0]);
        for (int j = 1; j < d; ++j) {
            printf(" %lld",f[i][j]);
        }
        printf("\n");
    }
    return 0;
}

代码二:

#include "stdio.h"
long long a[30][30];
long long f[10010][30];
int main(){
    int n,d;
    int Q[10010][30],K[10010][30],V[10010][30];
    long long W[10010];
    scanf("%d %d",&n,&d);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&Q[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&K[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            scanf("%d",&V[i][j]);
        }
    }
    for (int i = 0; i < n; ++i) {
        scanf("%lld",&W[i]);
    }
    for (int i = 0; i < d; ++i) {
        for (int j = 0; j < d; ++j) {
            for (int k = 0; k < n; ++k) {
                a[i][j]+=(K[k][i]*V[k][j]);
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            for (int k = 0; k < d; ++k) {
                f[i][j]+=(a[k][j]*Q[i][k]);
            }
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < d; ++j) {
            f[i][j]*=W[i];
        }
    }
    for (int i = 0; i < n; ++i) {
        printf("%lld",f[i][0]);
        for (int j = 1; j < d; ++j) {
            printf(" %lld",f[i][j]);
        }
        printf("\n");
    }
    return 0;
}

欢迎评论区留言文章来源地址https://www.toymoban.com/news/detail-731460.html

到了这里,关于CCF认证202305-2矩阵运算(C语言版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CCF认证+蓝桥杯习题训练

    贪心 *上取整公式* *代码展示*

    2024年01月17日
    浏览(16)
  • R语言学习笔记——矩阵的运算

    1.矩阵的运算 1.1矩阵的转置        t()  1.2求矩阵的行列式        det()  1.3求矩阵的内积 (1)%*%  (2)crossprod(x,y)等价于t(x)%*%y 1.4矩阵的外积 (1)%o%  (2)outer(x,y)  (3)tcrossprod(x,y)等价于x%*%t(y)  1.5矩阵的乘积(矩阵A的列数等于矩阵B的行数) 运行结果展示 结

    2024年02月08日
    浏览(32)
  • 第八次CCF计算机软件能力认证

    第一题:最大波动 小明正在利用股票的波动程度来研究股票。 小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。 输入格式 输入的第一行包含了一个整数 n,表

    2024年02月15日
    浏览(29)
  • 第二次CCF计算机软件能力认证

    给定 n 个 不同的 整数,问这些数中有多少对整数,它们的值正好相差 1。 输出格式 输入的第一行包含一个整数 n,表示给定整数的个数。 第二行包含所给定的 n 个整数。 输出格式 输出一个整数,表示值正好相差 1 的数对的个数。 数据范围 1≤n≤1000, 给定的整数为不超

    2024年02月13日
    浏览(31)
  • 第三次CCF计算机软件能力认证

    第一题:门禁系统 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。 每位读者有一个编号,每条记录用读者的编号来表示。 给出读者的来访记录,请问每一条记录中的读者是第几次出现。 输入格式 输入的第一行包含一个整数 n,表示涛涛的记录条数。

    2024年02月15日
    浏览(30)
  • C语言数据结构课设:矩阵的运算(转置.求和.求差.矩阵相乘.求逆.数乘),文件读取矩阵

      #include stdio.h #include string.h #includestdlib.h #includemath.h // 定义一个结构体类型,表示一个矩阵 typedef struct matrix {     int nrow; // 矩阵的行数     int ncol; // 矩阵的列数     double data[10][10]; // 矩阵的数据,最大为 10 x 10 } matrix; // 定义一个函数,用于显示一个矩阵的内容  void dis

    2024年03月27日
    浏览(43)
  • 第31次CCF计算机软件能力认证

    100+100+100+100+60=460 给定 (n) 个操作,每个操作将坐标 ((x,y)) 变为 ((x + dx, y + dy)) 。 给定 (m) 个点,问这 (m) 个点经过这 (n) 次操作变换后的坐标。 注意到操作是可合并的,因此可以先将这 (n) 个操作合并成一个操作,然后对每个点都经过这个操作变换即可,时间复杂度

    2024年02月08日
    浏览(23)
  • 第22次CCF计算机软件能力认证

    第一题:灰度直方图 解题思路: 哈希表即可 第二题:邻域均值  解题思路: 二维前缀和 第三题:DHCP服务器 解题思路: 认真读题,题目描述的非常清楚更具题目进行求解即可, 第四题:校门外的树 解题思路: dp问题 设 f[i] 为用了前 i 个障碍点的所有方案 f[i]=(f[0]∗cnt1+

    2024年02月12日
    浏览(23)
  • 第30次CCF计算机软件能力认证

    100+100+100+80+100=480 依次给定 (n) 个国际象棋局面,依次回答每个局面是第几次出现。 拿 map 记录下每个局面,统计计数即可。 神奇的代码 给定 (n times d) 的矩阵 (q, k, v) ,一个 (n) 维向量 (w) ,计算 ((w cdot (q times k^{T})) times v) 的结果。 (n leq 10^4, d leq 20) (q times k

    2024年02月06日
    浏览(25)
  • 第十四次CCF计算机软件能力认证

    第一题:买菜 在一条街上有 n 个卖菜的商店,按 1 至 n 的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。 店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。 具体的,每家

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包