JPEG 解码
作者:
目目目
,
2023-03-10 16:13:10
,
所有人可见
,
阅读 234
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
#define PI acos(-1)
using namespace std;
typedef pair<int, int> PII;
const int N = 10, M = 2e5 + 10, INF = 0x3f3f3f3f3f3f3f3f;
int n;
int q[N][N], m[N][N];
double res[N][N];
bool st[N][N];
int dx[4] = {0, 1, 1, -1}, dy[4] = {1, -1, 0, 1};
void solve()
{
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
cin >> q[i][j];
int op;
cin >> n >> op;
int d = 3;
int x = 1, y = -1;
for (int i = 1; i <= n; i++)
{
for (; 1; d = (d + 1) % 4)
{
int nx = x + dx[d], ny = y + dy[d];
if (nx < 0 || nx > 7 || ny < 0 || ny > 7 || st[nx][ny])
continue;
x = nx, y = ny;
break;
}
cin >> m[x][y];
st[x][y] = true;
if (d == 0 || d == 2)
d++;
}
if (op == 0)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
cout << m[i][j] << ' ';
cout << endl;
}
return;
}
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
m[i][j] = m[i][j] * q[i][j];
if (op == 1)
{
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
cout << m[i][j] << ' ';
cout << endl;
}
return;
}
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
for (int u = 0; u < 8; u++)
{
double au = (u == 0 ? sqrt(0.5) : 1);
for (int v = 0; v < 8; v++)
{
double av = (v == 0 ? sqrt(0.5) : 1);
res[i][j] += 0.25 * au * av * m[u][v] * cos(PI / 8.0 * (i + 0.5) * u) * cos(PI / 8.0 * (j + 0.5) * v);
}
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
int t = round(res[i][j] + 128);
if (t > 255)
t = 255;
if (t < 0)
t = 0;
cout << t << ' ';
}
cout << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// int T;
// cin >> T;
// while (T--)
solve();
return 0;
}
111