CCF201909-3 字符画(100分)文本处理
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF201909-3 字符画(100分)文本处理相关的知识,希望对你有一定的参考价值。
试题编号: 201909-3
试题名称: 字符画
时间限制: 5.0s
内存限制: 512.0MB
问题链接:CCF201909-3 字符画
问题简述:(略)
问题分析:(略)
程序说明:(略)
参考链接:(略)
题记:(略)
100分的C++语言程序如下:
/* CCF201909-3 字符画 */
#include <bits/stdc++.h>
using namespace std;
const int N = 1080;
const int M = 1920;
struct RGB {
int rgb[3];
} image[N][M];
bool isrgbeq(RGB &a, RGB &b)
{
for (int i = 0; i < 3; i++)
if (a.rgb[i] != b.rgb[i]) return false;
return true;
}
void output(string t)
{
for(int i = 0; t[i]; i++) // 转为ascii码
cout << "\\\\x" << hex << uppercase << setw(2) << int(t[i]);
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int m, n, p, q;
cin >> m >> n >> p >> q;
string rgb;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
cin >> rgb;
if (rgb.size() == 2)
rgb += string(5, rgb.back()); // #a变换为#aaaaaa
else if (rgb.size() == 4)
// #abc变换为#aabbcc
rgb = "#" + string(2,rgb[1]) + string(2,rgb[2]) + string(2,rgb[3]);
// 将16进制转换为10进制进行存储
RGB color;
for (int k = 0; k < 3; k++)
color.rgb[k] = stoi(rgb.substr(2 * k + 1, 2), 0, 16);
image[i][j] = color;
}
// 处理小块(计算平均值),输出小块
RGB last = {0, 0, 0}, defcolor = {0, 0, 0};
for (int i = 0; i < n / q; i++) {
for (int j = 0; j < m / p; j++) {
RGB cur = {0, 0, 0};
for (int i2 = 0; i2 < q; i2++)
for (int j2 = 0; j2 < p; j2++)
for (int k = 0; k < 3; k++)
cur.rgb[k] += image[i * q + i2][j * p + j2].rgb[k];
// 计算平均值
for (int k = 0; k < 3; k++)
cur.rgb[k] /= p * q;
if (isrgbeq(cur, last)) // 跟前一个小块一样
;
else if (isrgbeq(cur, defcolor)) { // 跟默认一样
last = defcolor;
cout << "\\\\x1B\\\\x5B" << "\\\\x30\\\\x6D";
} else {
//如果都不一样
last = cur;
output("\\x1b[48;2;" + to_string(cur.rgb[0]) + ";" + to_string(cur.rgb[1]) + ";" + to_string(cur.rgb[2]) + "m");
}
cout<<"\\\\x20"; // 每个小块结束输出一个空格
}
if (!isrgbeq(last, defcolor)) { // 换行判断结尾是否为默认值
last = defcolor;
cout << "\\\\x1B\\\\x5B" << "\\\\x30\\\\x6D";
}
cout << "\\\\x0A"; // 输出一个换行符
}
return 0;
}
/*
1 1
1 1
#010203
2 2
1 2
#111111
#0
#111
*/
以上是关于CCF201909-3 字符画(100分)文本处理的主要内容,如果未能解决你的问题,请参考以下文章
CCF202006-3 Markdown渲染器(100分)文本处理