CSP-202212-3 - JPEG デコード

問題の背景

ここに画像の説明を挿入

問題の説明

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

入力フォーマット

ここに画像の説明を挿入

出力フォーマット

ここに画像の説明を挿入

サンプル入力

ここに画像の説明を挿入

サンプル出力ここに画像の説明を挿入

サンプル概要

ここに画像の説明を挿入

サブタスク

ここに画像の説明を挿入

ヒント

ここに画像の説明を挿入

解決

この質問は、最近の最も単純な大規模シミュレーションです.唯一の難点は、データのZ字型スキャンです.パターンを見つけるのが面倒な場合は、テーブルを直接入力できます.また、非常に高速です. このような大規模なシミュレーション問題の背景を調べる必要はなく、問題の説明から直接始めて、文章をコードに変換します。

#include<iostream>
#include<cmath>
#include<algorithm>
#define PI acos(-1)
using namespace std;
double Q[10][10]; //量化矩阵 
double M[10][10]; 
int n,T;//扫描数据的个数、将要进行的任务
int a[66]={
    
    0,0,1,2,1,0,0,1,2,3,4,3,2,1,0,0,1,2,3,4,5,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,2,3,4,5,6,7,7,6,5,4,3,4,5,6,7,7,6,5,6,7,7};
int b[66]={
    
    0,1,0,0,1,2,3,2,1,0,0,1,2,3,4,5,4,3,2,1,0,0,1,2,3,4,5,6,7,6,5,4,3,2,1,0,1,2,3,4,5,6,7,7,6,5,4,3,2,3,4,5,6,7,7,6,5,4,5,6,7,7,6,7}; 
double C[10][10]; 
void yuxianbianhuan(){
    
    
	for(int i=0;i<8;i++){
    
    
		for(int j=0;j<8;j++){
    
    
			double ans=0;
			for(int u=0;u<8;u++){
    
    
		        for(int v=0;v<8;v++){
    
    
			       double a=1;
				   double b=1;
			       if(u==0) a=sqrt(0.5);
			       if(v==0) b=sqrt(0.5);
			       double temp=a*b*M[u][v]*cos((PI/8)*(i+0.5)*u)*cos((PI/8)*(j+0.5)*v);
		           ans+=temp;
				}
	       }
	       ans=ans/4;
	       C[i][j]=ans;
		}
	}
	for(int i=0;i<8;i++){
    
    
		for(int j=0;j<8;j++){
    
    
			M[i][j]=C[i][j]+128;
			M[i][j]=round(M[i][j]);
			if(M[i][j]>255){
    
    
				M[i][j]=255;
			}
			if(M[i][j]<0){
    
    
				M[i][j]=0;
			}
		}
	}
	
} 
int main(){
    
    
	for(int i=0;i<8;i++){
    
    
		for(int j=0;j<8;j++){
    
    
			cin>>Q[i][j]; 
		}
	} 
	cin>>n>>T; 
	for(int i=0;i<n;i++){
    
    
		cin>>M[a[i]][b[i]];
	}
	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++){
    
    
			    M[i][j]*=Q[i][j];
			    cout<<M[i][j]<<" ";
		    }
		    cout<<endl;
	    }

	}
	else{
    
    
		for(int i=0;i<8;i++){
    
    
		    for(int j=0;j<8;j++){
    
    
			    M[i][j]*=Q[i][j]; 
		    }
	    }
	    yuxianbianhuan();
		for(int i=0;i<8;i++){
    
    
		    for(int j=0;j<8;j++){
    
    
			    cout<<M[i][j]<<" ";
		    }
		    cout<<endl;
	    }	
	}
	return 0;
} 

おすすめ

転載: blog.csdn.net/weixin_55085530/article/details/129639099