#include<bits/stdc++.h>
using namespace std;
int n,m,p,q;
int all[1090][1930][3];
bool ok(int *a,int*b)
{
for(int i=0; i<3; i++)
if(a[i]!=b[i])
return false;
return true;
}
int convert(string t)
{
int ans=0;
for(int i=0; i<t.size(); i++)
{
if(t[i]<='9'&&t[i]>='0')
{
ans*=16;
ans+=t[i]-'0';
}
else
{
ans*=16;
ans+=(t[i]-'a')+10;
}
}
return ans;
}
void output(int*a,int flag)
{
string s;
if(flag==0)
{
s="\x1b[0m";
for(int i=0; i<s.size(); i++)
{
char c=s[i];
printf("\\x%02X", c);
}
}
else
{
s="\x1b[48;2;";//+to(a[0])+";"+to(a[1])+";"+to(a[2])+"m";
for(int i=0; i<s.size(); i++)
{
char c=s[i];
printf("\\x%02X", c);
}
for(int i=0;i<3;i++)
{
//cout<<a[i]<<"**"<<endl;
if(a[i]/100>0)
{
int t=a[i]/100;
char a1='0'+t;
printf("\\x%02X", a1);
t=a[i]%100;
t/=10;
//cout<<t<<"!!!"<<endl;
a1='0'+t;
printf("\\x%02X", a1);
t=a[i]%10;
a1='0'+t;
printf("\\x%02X", a1);
if(i!=2)
printf("\\x%02X", ';');
}
else if(a[i]/10>0)
{
int t=a[i]/10;
char a1='0'+t;
printf("\\x%02X", a1);
t=a[i]%10;
a1='0'+t;
printf("\\x%02X", a1);
if(i!=2)
printf("\\x%02X", ';');
}
else
{
int t=a[i]%10;
char a1='0'+t;
printf("\\x%02X", a1);
if(i!=2)
printf("\\x%02X", ';');
}
if(i==2)
printf("\\x%02X", 'm');
}
}
}
int main()
{
cin>>m>>n;
cin>>p>>q;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
string s;
cin>>s;
if(s.size()==2)
{
s+=string(5,s[s.size()-1]);
}
if(s.size()==4)
{
s="#"+string(2,s[1])+string(2,s[2])+string(2,s[3]);
}
//cout<<s<<endl;
for(int k=0; k<3; k++)
{
string temp=s.substr(2*k+1,2);
int t=convert(temp);
all[i][j][k]=t;
}
}
int defaults[3]= {0,0,0};
for(int i=0; i<n/q; i++)
{
int last[3]= {0,0,0};
for(int j=0; j<m/p; j++)
{
//´¦Àíÿ¸öÏñËØ¿é
int co[3]= {0,0,0};
for(int x=0; x<q; x++)
{
for(int y=0; y<p; y++)
{
for(int k=0; k<3; k++)
co[k]+=all[i*q+x][j*p+y][k];
}
}
for(int k=0; k<3; k++)
{
co[k]/=p*q;
}
if(!ok(co,last))
{
if(ok(co,defaults))
output(defaults,0);
else
output(co,1);
}
for(int k=0; k<3; k++)
last[k]=co[k];
printf("\\x%02X",' ');
}
if(!ok(last,defaults))
output(defaults,0);
for(int k=0; k<3; k++)
last[k]=defaults[k];
printf("\\x%02X",'\n');
}
}
由于模拟考试不支持c++11.手写了个字符串转数字,十六进制转十进制,有什么问题欢迎大家评论