#include<bits/stdc++.h>
using namespace std;
char str[4];
typedef struct block{
int r;
int g;
int b;
block(int a1,int a2,int a3){
r=a1;
g=a2;
b=a3;
}
block(){
r=0;
g=0;
b=0;
}
block operator +(const block k){
r+=k.r;
g+=k.g;
b+=k.b;
}
block operator -(const block k){
r-=k.r;
g-=k.g;
b-=k.b;
}
}block;
void f(int a){//10->16
str[0]='\\';
str[1]='x';
int a1=a/16;
int a2=a%16;
if(a1>=10){
str[2]='A'+a1-10;
}else str[2]=a1+'0';
if(a2>=10){
str[3]='A'+a2-10;
}else str[3]=a2+'0';
}
int xtod(string a){
char a1=a[0];
//cout<<"a1="<<a1-'a'+10<<endl;
char a0=a[1];
int k1=0,k0=0;
if(a1>='a'&&a1<='f'){
//cout<<(a1-'a'-'0'+10)<<endl;
k1=(a1-'a'+10)*16;
}else k1=(a1-'0')*16;
// cout<<k1<<endl;
if(a0>='a'&&a0<='f'){
k0=(a0-'a'+10);
}else k0=(a0-'0');
// cout<<k0<<endl;
return k0+k1;
}
//2 2
//1 2
//#111111
//#0
//#000000
//#111
vector<string>a;
vector<vector<block> >b;
vector<vector<block> >sum;
vector<vector<block> >cnt;
vector<block>cnt1;
int main(){
int m,n;
cin>>m>>n;
int p,q;
cin>>p>>q;
string ans="";
for(int i=0;i<=n;i++){
b.push_back(vector<block>());
b[i].push_back(block());
sum.push_back(vector<block>());
sum[i].push_back(block());
}
for(int i=0;i<m;i++){
b[0].push_back(block());
sum[0].push_back(block());
}
//cout<<"1";
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
string str;
cin>>str;
a.push_back(str);
block m1;
if(str.size()==7){
string str1=str.substr(1,2);
string str2=str.substr(3,2);
string str3=str.substr(5,2);
m1=block(xtod(str1),xtod(str2),xtod(str3));
// cout<<xtod(str1);
}else if(str.size()==4){
string str1=str.substr(1,1);
str1+=str1;
string str2=str.substr(2,1);
str2+=str2;
string str3=str.substr(3,1);
str3+=str3;
m1=block(xtod(str1),xtod(str2),xtod(str3));
}else{
string str1=str.substr(1,1);
str1+=str1;
string str2=str1;
string str3=str1;
m1=block(xtod(str1),xtod(str2),xtod(str3));
}
b[i].push_back(m1);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<b[i][j].r<<" "<<b[i][j].g<<" "<<b[i][j].b<<endl;
}
}
//sum[0].push_back(block());
// for(int i=0;i<n;i++){
// for(int j=0;j<m;j++){
// sum[i].push_back(block());
// }
// }
// for(int i=1;i<m;i++){
// sum[0][i]=sum[0][i-1]+b[0][i];
// }
// for(int i=1;i<n;i++){
// sum[i][0]=sum[i-1][0]+b[i][0];
// }
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j].r=sum[i-1][j].r+sum[i][j-1].r-sum[i-1][j-1].r+b[i][j].r;
sum[i][j].g=sum[i-1][j].g+sum[i][j-1].g-sum[i-1][j-1].g+b[i][j].g;
sum[i][j].b=sum[i-1][j].b+sum[i][j-1].b-sum[i-1][j-1].b+b[i][j].b;
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++){
// cout<<sum[i][j].r<<" "<<sum[i][j].g<<" "<<sum[i][j].b<<endl;
// }
// }
// for(int i=0;i<b.size();i++){
// cout<<b[i].r<<" "<<b[i].g<<" "<<b[i].b<<endl;
// }
int num=m*n/p*q;
int area=p*q;
int m1=0,m2=0;//横的块数和竖的块数
m1=m/p;
m2=n/q;
cout<<"m1="<<m1<<" m2="<<m2<<endl;
for(int i=0;i<m2;i++){
cnt.push_back(vector<block>());
cnt[i].push_back(block());
}
for(int j=0;j<m1;j++){
cnt[0].push_back(block());
}
cout<<"ok"<<endl;
for(int i=1;i<=m2;i++){
for(int j=1;j<=m1;j++){
int x1=0,y1=0,x2=0,y2=0;
y1=(j-1)*p+1;x1=q*(i-1)+1;
y2=(j+1)*p;x2=(i+1)*q;
cnt[i].push_back(sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1]);
}
}
cout<<"ok1"<<endl;//到这不能运行
for(int i=1;i<=m2;i++){
for(int j=1;j<=m1;j++){
cnt[i][j].r/=p*q;
cnt[i][j].g/=p*q;
cnt[i][j].b/=p*q;
}
}
for(int i=1;i<=m2;i++){
for(int j=1;j<=m1;j++){
cnt1.push_back(cnt[i][j]);
}
}
for(int i=0;i<m1*m2;i++){
cout<<"第"<<i<<"块的rgb为:"<<cnt1[i].r<<" "<<cnt1[i].g<<cnt1[i].b<<endl;
}
cout<<"asd";
for(int i=0;i<cnt1.size();i++){
if(i==0){
if(cnt1[i].r==0&&cnt1[i].g==0&&cnt1[i].b==0){
ans+="\x1b[0m ";
}else{
ans+="\x1b[48;2";
string str1=to_string(cnt1[i].r);
ans+=str1;
ans+=";";
string str2=to_string(cnt1[i].g);
ans+=str2;
ans+=";";
string str3=to_string(cnt1[i].b);
ans+=str3;
ans+="m ";
}
}else{
if(cnt1[i].r==cnt1[i-1].r&&cnt1[i].g==cnt1[i-1].g&&cnt1[i].b==cnt1[i-1].b){
ans+=" ";
continue;
}else{
ans+="\x1b[48;2";
string str1=to_string(cnt1[i].r);
ans+=str1;
ans+=";";
string str2=to_string(cnt1[i].g);
ans+=str2;
ans+=";";
string str3=to_string(cnt1[i].b);
ans+=str3;
ans+="m ";
}
}
}
ans+="\x1b[0m\n";
// char a='6';
// printf("十进制是:%d\n",a);
// printf("十六进制是:%x\n",a);
// int a=116;
// cout<<f(a)<<endl;
// f(255);
// for(int i=0;i<4;i++)cout<<str[i];
// string ans="";
// cout<<xtod("a2");
// string s="\x1b[38;2;1;2;3m \x1b[0m\n";
// string ss="\x1b[48;2;8;8;8m \x1b[0m\n";
// char a=' ';
// printf("%x %d",a,a);
// for(char t:ss){
// int k=t;
// f(k);
// for(int i=0;i<4;i++)cout<<str[i];
// }
//printf("%x",'4');
//cout<<k;
for(char t:ans){
int k=t;
f(k);
for(int i=0;i<4;i++)cout<<str[i];
}
}
没写完