#include <iostream>
#include <cmath>
#include <iomanip>
const int N = 4;
const double PI = 3.14159265358979323846;
double alpha(int u) {
return (u == 0) ? 1.0 / sqrt(2.0) : 1.0;
}
int main() {
int input[N][N] = {
{23, 24, 25, 22},
{26, 22, 21, 23},
{20, 25, 24, 25},
{24, 25, 26, 24}
};
double dct[N][N];
for (int u = 0; u < N; ++u) {
for (int v = 0; v < N; ++v) {
double sum = 0.0;
for (int x = 0; x < N; ++x) {
for (int y = 0; y < N; ++y) {
sum += input[x][y] *
cos((2 * x + 1) * u * PI / (2 * N)) *
cos((2 * y + 1) * v * PI / (2 * N));
}
}
dct[u][v] = 0.25 * alpha(u) * alpha(v) * sum;
}
}
std::cout << std::fixed << std::setprecision(2);
std::cout << "DCT Result:\n";
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
std::cout << std::setw(8) << dct[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxpb21hbmlwPgoKY29uc3QgaW50IE4gPSA0Owpjb25zdCBkb3VibGUgUEkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OwoKZG91YmxlIGFscGhhKGludCB1KSB7CiAgICByZXR1cm4gKHUgPT0gMCkgPyAxLjAgLyBzcXJ0KDIuMCkgOiAxLjA7Cn0KCmludCBtYWluKCkgewogICAgaW50IGlucHV0W05dW05dID0gewogICAgICAgIHsyMywgMjQsIDI1LCAyMn0sCiAgICAgICAgezI2LCAyMiwgMjEsIDIzfSwKICAgICAgICB7MjAsIDI1LCAyNCwgMjV9LAogICAgICAgIHsyNCwgMjUsIDI2LCAyNH0KICAgIH07CgogICAgZG91YmxlIGRjdFtOXVtOXTsKCiAgICBmb3IgKGludCB1ID0gMDsgdSA8IE47ICsrdSkgewogICAgICAgIGZvciAoaW50IHYgPSAwOyB2IDwgTjsgKyt2KSB7CiAgICAgICAgICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgTjsgKyt4KSB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IE47ICsreSkgewogICAgICAgICAgICAgICAgICAgIHN1bSArPSBpbnB1dFt4XVt5XSAqCiAgICAgICAgICAgICAgICAgICAgICAgIGNvcygoMiAqIHggKyAxKSAqIHUgKiBQSSAvICgyICogTikpICoKICAgICAgICAgICAgICAgICAgICAgICAgY29zKCgyICogeSArIDEpICogdiAqIFBJIC8gKDIgKiBOKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGN0W3VdW3ZdID0gMC4yNSAqIGFscGhhKHUpICogYWxwaGEodikgKiBzdW07CiAgICAgICAgfQogICAgfQoKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmZpeGVkIDw8IHN0ZDo6c2V0cHJlY2lzaW9uKDIpOwogICAgc3RkOjpjb3V0IDw8ICJEQ1QgUmVzdWx0OlxuIjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBOOyArK2opIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6c2V0dyg4KSA8PCBkY3RbaV1bal0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBzdGQ6OmNvdXQgPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=