第30次CCF-CSP计算机软件能力认证-2-矩阵运算

原题链接:http://118.190.20.162/view.page?gpid=T169

AcWing链接:https://www.acwing.com/file_system/file/content/whole/index/content/10768311/

笔记

2025.3.3
1.按照公式一步一步乘矩阵产生中间数,在遇到n=10000时会产生Segmentation Fault
2.看了题解之后,需要从右往左算,因为Q(n,d) x K(d,n)的结果是a[n][n],如果K(d,n) x V(n,d)=[d][d],数量级会小很多

第一版:(在遇到n=10000时会产生Segmentation Fault)

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n=0;
    int d=0;
    cin>>n>>d;
    long long int q[n][d];
    long long int k[n][d];
    long long int a[n][n];
    long long int b[n][n];
    long long int v[n][d];
    long long int w[n];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>q[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>k[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>v[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        cin>>w[i];
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j]=0;
            b[i][j]=0;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int k1=0;k1<n;k1++)
        {
            for(int j=0;j<d;j++)
            {
                a[i][k1]+=q[i][j]*k[k1][j];
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            a[i][j]=a[i][j]*w[i];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int k1=0;k1<d;k1++)
        {
            for(int j=0;j<n;j++)
            {
                b[i][k1]+=a[i][j]*v[j][k1];
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cout<<b[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

第二版(Accepted)

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int n=0;
    int d=0;
    cin>>n>>d;
    long long int q[n][d];
    long long int k[n][d];
    long long int a[d][d];
    long long int b[n][d];
    long long int v[n][d];
    long long int w[n];
     

    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>q[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>k[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cin>>v[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        cin>>w[i];
    }
    for(int i=0;i<d;i++)
    {
        for(int j=0;j<d;j++)
        {
            a[i][j]=0;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            b[i][j]=0;
        }
    }
    for(int i=0;i<d;i++)
    {
        for(int k1=0;k1<d;k1++)
        {
            for(int j=0;j<n;j++)
            {
                a[i][k1]+=k[j][i]*v[j][k1];
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int k1=0;k1<d;k1++)
        {
            for(int j=0;j<d;j++)
            {
               b[i][k1]+=a[j][k1]*q[i][j];
            }
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            b[i][j]=b[i][j]*w[i];
        }
    }
    
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<d;j++)
        {
            cout<<b[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
### 第28CSP认证考试内容概述 第28CCF-CSP认证考试的内容涵盖了多个方面的计算机科学基础知识和编程技能测试。具体来说,这考试包含了多道题目,每一道都针对不同的算法设计、数据结构以及实际问题解决能力进行了考查。 #### T1 现值计算 第一题属于较为基础的模拟类问题,主要考察考生的基础编程能力和公式的应用能力。通过输入若干参数并按照给定公式进行处理来得出最终的结果[^4]。此部分重点在于理解题目描述中的数学关系,并能将其转化为程序实现。 ```python n, i = map(float, input().split()) l = list(map(int, input().split())) res = 0 for index in range(int(n + 1)): res += l[index] * (1 + i) ** (-index) print("%.3f" % res) ``` 上述代码片段展示了如何基于提供的数值列表 `l` 和利率 `i` 来完成现值求和运算的过程。 #### T3 JPEG 解码 第三题涉及到了图像编码领域的一个经典话题——JPEG解码过程。该试题被评价为相对容易的一道大题,在整个CSP系列考试的历史上也处于较低难度级别之一[^3]。它要求参赛者严格按照题目所给出的操作指南一步步执行相应的操作流程从而还原原始图片信息。 ### 备考建议与资料推荐 对于即将参加此类竞赛的学生而言,可以从以下几个方面着手准备: - **熟悉历年真题**:通过对以往各届比赛的真实案例的学习掌握常见考点及其变化趋势;特别注意那些反复出现的核心知识点。 - **加强实践训练**:除了理论学习外还需要不断积累实战经验,尝试独立解决问题的能力提升尤为重要。可以利用在线平台上的公开资源来进行针对性练习[^1]。 - **深入研究特定主题**:如果发现某些模块存在明显短板,则应该集中精力攻克难关。比如本场考试中的“JPEG解码”,就需要提前了解相关背景知识以便快速切入正题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值