CCF CSP202212-3JPEG解码

题目

测试结果

 代码示例

 #include <iostream>
#include <bits/stdc++.h>
#define PI acos(-1)
using namespace std;
int M[8][8];
int M1[8][8];
float M2[8][8];
int M3[8][8];
int Q[8][8];
double para(int x)
{
    return x==0?sqrt(0.5):1;
}
int main()
{
    int n;
    int T;
    for(int i=0; i<8; i++){
        for(int j=0; j<8; j++){
            cin >> Q[i][j];
        }
    }
    cin >> n >> T;
    int view_array[n];
    for(int i=0; i<n; i++){
        cin >> view_array[i];
    }
    M[0][0]=view_array[0];
    int x=0,y=0,z=0,tag=0,sum=1;
    while(z<n-1){
        if(sum<36){
            if(tag==0){
                M[x][++y]=view_array[++z];
                sum++;
                tag=1;
            }
            else if(tag==2){
                M[++x][y]=view_array[++z];
                sum++;
                tag=3;
            }
            else if(tag==1){
                M[++x][--y]=view_array[++z];
                sum++;
                if(y==0) tag=2;
            }
            else if(tag==3){
                M[--x][++y]=view_array[++z];
                sum++;
                if(x==0) tag=0;
            }
        }
        else{
            if(tag==2){
                M[x][++y]=view_array[++z];
                sum++;
                tag=3;
            }
            else if(tag==3){
                M[--x][++y]=view_array[++z];
                sum++;
                if(y==7) tag=0;
            }
            else if(tag==0){
                M[++x][y]=view_array[++z];
                sum++;
                tag=1;
            }
            else if(tag==1){
                M[++x][--y]=view_array[++z];
                sum++;
                if(x==7) tag=2;
            }
        }
    }
    //填充后的矩阵和量化矩阵相乘
    for(int i=0; i<8; i++){
        for(int j=0; j<8; j++){
            M1[i][j] = M[i][j]*Q[i][j];
        }
    }
    if(T==0){
        for(int i=0; i<8; i++){
            for(int j=0; j<8; j++){
                cout << M[i][j] << " ";
            }
            cout << endl;
        }
    }
    else if(T==1){
        for(int i=0; i<8; i++){
            for(int j=0; j<8; j++){
                cout << M1[i][j] << " ";
            }
            cout << endl;
        }
    }
    else if(T==2){
        //离散变换
        for(int i=0; i<8; i++){
            for(int j=0; j<8; j++){
                for(int k=0; k<8; k++){
                    for(int l=0; l<8; l++){
                        M2[i][j]+=para(k)*para(l)*M1[k][l]*(cos((PI*0.125)*(i+0.5)*k))*(cos((PI*0.125)*(j+0.5)*l));
                    }
                }
                M2[i][j]=(M2[i][j]*0.25);
            }
        }
        //离散变换后+128并就近取整
        for(int i=0; i<8; i++){
            for(int j=0; j<8; j++){
                M2[i][j]=M2[i][j]+128;
                int temp = M2[i][j];
                double del = M2[i][j] - temp;
                if (del >= 0.5) temp+=1;
                M3[i][j]=temp;
                if(M3[i][j]>255){
                    M3[i][j]=255;
                }
                else if(M3[i][j]<0){
                    M3[i][j]=0;
                }
            }
        }
        for(int i=0; i<8; i++){
            for(int j=0; j<8; j++){
                cout << M3[i][j] << " ";
            }
            cout << endl;
        }
    }
    return 0;
}

思路 

这个题就很简单了,和以前得题目相比这个题可能还没达到第二题的难度。总体写下来感觉有两个需要关注的点吧。

(1)扫描数据并填充矩阵

 这里我用的方法就很简单的,在图的上三角的游走轨迹进行标记并判断是否到边界,同样在下三角的游走轨迹也进行标记和判断边界,根据游走轨迹找x和y的规律变化,同时在右下角的时候记得要标记衔接,我是以填充上三角的数量来判断是否到达了需要改变轨迹的位置。

 (2)+128并就近取整

这个取整过程一定要在离散变换之后加上128后再取整(四舍五入)。

                M2[i][j]=M2[i][j]+128;
                int temp = M2[i][j];
                double del = M2[i][j] - temp;
                if (del >= 0.5) temp+=1;
                M3[i][j]=temp;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[3\]的信息,我们可以得知顿顿需要在n天时间内完成m项科目的加强训练。每项科目有一个编号,编号为i,其中1≤i≤m。每项科目的训练时间为ti天,即从第a天开始训练科目i,训练将持续到第a+ti−1天。科目之间存在依赖关系,如果科目i依赖科目j,那么只能在科目j训练结束后,科目i才能开始训练。 对于csp202212-2题目中的c++训练计划,我们需要知道c++训练的编号以及训练的时间。根据题目描述,我们可以得知c++训练的编号为2。然而,题目中没有提供c++训练的具体时间。因此,我们无法确定c++训练的时间。 综上所述,我们无法确定c++训练的具体计划。 #### 引用[.reference_title] - *1* *3* [CCF CSP 202212-2 训练计划(C++)](https://blog.csdn.net/qq_46092061/article/details/129207826)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CCF-CSP真题《202212-2 训练计划》思路+python题解](https://blog.csdn.net/weixin_53919192/article/details/129084465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值