原题链接:CCP-CSP 201909-3 字符画
这道题我觉得难点主要是不会处理ASCII码的转换,还有就是看不懂题,其实逻辑不难。
参考博客:CCF CSP 20190903 字符画 100分
#include <bits/stdc++.h>
using namespace std;
int block[2000][2000][3];
int cal(char c1,char c2)
{
int res=0;
if(c1>='a') res+=(c1-'a'+10)*16;
else res+=(c1-'0')*16;
if(c2>='a') res+=(c2-'a'+10);
else res+=(c2-'0');
return res;
}
string change(int num)
{
stringstream ss;
ss<<num;
string s;
ss>>s;
ss.clear();
for(int i=0;i<s.size();i++)
{
ss<<"\\x";
ss<<hex<<setw(2)<<uppercase<<(int)s[i];
}
ss>>s;
return s;
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int m,n,p,q;
cin>>m>>n;
cin>>p>>q;
string s;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>s;
s=s.substr(1);
int a,b,c;
if(s.size()==6)
{
a=cal(s[0],s[1]); b=cal(s[2],s[3]); c=cal(s[4],s[5]);
}
else if(s.size()==3)
{
a=cal(s[0],s[0]); b=cal(s[1],s[1]); c=cal(s[2],s[2]);
}
else if(s.size()==1)
{
a=cal(s[0],s[0]); b=a; c=a;
}
block[i][j][0]=a; block[i][j][1]=b; block[i][j][2]=c;
}
}
int row=n/q,col=m/p;
string s1,s2,s3;
int p1=0,p2=0,p3=0;
for(int i=0;i<row;i++)
{
p1=0,p2=0,p3=0;
for(int j=0;j<col;j++)
{
int r=0,g=0,b=0;
for(int k=i*q;k<(i+1)*q;k++)
{
for(int h=j*p;h<(j+1)*p;h++)
{
r+=block[k][h][0];
g+=block[k][h][1];
b+=block[k][h][2];
}
}
r/=(p*q); g/=(p*q); b/=(p*q);
s1=change(r); s2=change(g); s3=change(b);
if(!(r==p1 && g==p2 && b==p3))
{
if(r==0 && g==0 && b==0)
{
cout<<"\\x1B\\x5B\\x30\\x6D";
}
else
{
cout<<"\\x1B\\x5B\\x34\\x38\\x3B\\x32\\x3B"<<s1<<"\\x3B"<<s2<<"\\x3B"<<s3<<"\\x6D";
}
}
cout<<"\\x20";
if(j==col-1 && !( r==0 && g==0 && b==0 ))
{
cout<<"\\x1B\\x5B\\x30\\x6D";
}
p1=r,p2=g,p3=b;
}
cout<<"\\x0A";
}
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)