問題の背景
問題の説明
入力フォーマット
出力フォーマット
サンプル入力
サンプル出力
サンプル概要
サブタスク
ヒント
解決
この質問は、最近の最も単純な大規模シミュレーションです.唯一の難点は、データの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;
}