csp 201909-3 字符画

#include 
using namespace std;
const int maxn = 1080 + 7;
const int maxm = 1920 + 7;
int m, n, p, q;
int r[maxn][maxm];
int g[maxn][maxm];
int b[maxn][maxm];
char s[7];
int prer, preg, preb;
int tox(char s[])
{
     
    int temp = 0;
    if(s[0] >= '0' && s[0] <= '9')
    {
     
        temp = s[0] - '0';
    }
    if(s[0] >= 'a' && s[0] <= 'f')
    {
     
        temp = s[0] - 'a' + 10;
    }
    if(s[0] >= 'A' && s[0] <= 'F')
    {
     
        temp = s[0] - 'A' + 10;
    }
    temp *= 16;
    if(s[1] >= '0' && s[1] <= '9')
    {
     
        temp += s[1] - '0';
    }
    if(s[1] >= 'a' && s[1] <= 'f')
    {
     
        temp += s[1] - 'a' + 10;
    }
    if(s[1] >= 'A' && s[1] <= 'F')
    {
     
        temp += s[1] - 'A' + 10;
    }
    //cout<
    return temp;
}
void read()
{
     
    scanf("%d%d", &m, &n);
    scanf("%d%d", &p, &q);
    for(int i = 0; i < n; i ++)
    {
     
        for(int j = 0; j < m; j ++)
        {
     
            scanf("%s", s);
            if(strlen(s) == 4)
            {
     
                s[5] = s[6] = s[3];
                s[3] = s[4] = s[2];
                s[2] = s[1];
            }
            if(strlen(s) == 2)
            {
     
                for(int k = 2; k < 7; k ++)
                    s[k] = s[1];
            }
            r[i][j] = tox(s + 1);
            g[i][j] = tox(s + 3);
            b[i][j] = tox(s + 5);
        }
    }
}
void getaverage()
{
     
    for(int i = 0; i < n; i += q)
    {
     
        for(int j = 0; j < m; j += p)
        {
     
            long long tempr = 0, tempg = 0, tempb = 0;
            for(int ti = i; ti < i + q; ti ++)
            {
     
                for(int tj = j; tj < j + p; tj ++)
                {
     
                    tempr += r[ti][tj];
                    tempg += g[ti][tj];
                    tempb += b[ti][tj];
                }
            }
            r[i][j] = tempr / (p * q);
            g[i][j] = tempg / (p * q);
            b[i][j] = tempb / (p * q);
            //cout<
        }
    }
}
void todefault()
{
     
    printf("\\x1B\\x5B\\x30\\x6D");
}
void ton()
{
     
    printf("\\x0A");
}
void printx(int n)
{
     
    if(n < 10) printf("\\x%d", 30 + n);
	else if(n<100) cout<<"\\x"<<n/10+30<<"\\x"<<n%10+30;
	else cout<<"\\x"<<n/100+30<<"\\x"<<(n/10)%10+30<<"\\x"<<n%10+30;
}
void to(int r, int g, int b)
{
     
    printf("\\x1B\\x5B\\x34\\x38\\x3B\\x32\\x3B");
    printx(r);
    printf("\\x3B");
    printx(g);
    printf("\\x3B");
    printx(b);
    printf("\\x6D");
}
void toprint()
{
     
    printf("\\x20");
}
void print()
{
     
    for(int i = 0; i < n; i += q)
    {
     
        prer = preg = preb = 0;
        for(int j = 0; j < m; j += p)
        {
     
           
            if(r[i][j] != prer || g[i][j] != preg || b[i][j] != preb)
            {
      
                if(!r[i][j] && !g[i][j] && !b[i][j] && j)
                {
     
                    todefault();
                }
                else
                    to(r[i][j], g[i][j], b[i][j]);
                prer = r[i][j];
                preg = g[i][j];
                preb = b[i][j];
            }
            toprint();
        }
        if(prer || preg || preb)
            todefault();
        ton();
    }
}
int main()
{
     
    read();
    getaverage();
    print();
    //system("pause");
    return 0;
}

你可能感兴趣的:(随笔)