#include using namespace std; typedef long long Int; const int D=55; const int N=505; const int INF=(1e9)+5; const Int BIGINF=(1e18)+5; const int CLIMIT=16; struct Color { int red; int green; int blue; }; struct ColorCount { int red; int green; int blue; int cnt; }; struct Diff { int x; int y; int x1; int y1; int diff; }; vector vdiff; Color pic[N][N]; int compression[N][N]; int best_compression[N][N]; vector palette; vector best_palette; int cube[D][D][D]; vector sieve[D][D][D]; vector colorcount; int n,m; bool CompareDifference(Diff p,Diff q) { return p.diff>q.diff; } bool CompareColorsRed(Color p, Color q) { return p.redq.cnt; } bool HardLimit() { return clock()/(double)CLOCKS_PER_SEC>3.0; } bool TimeIsOK() { return clock()/(double)CLOCKS_PER_SEC<4.5; } int Distance(Color p,Color q) { return ((p.red-q.red)*(p.red-q.red))+((p.green-q.green)*(p.green-q.green))+((p.blue-q.blue)*(p.blue-q.blue)); } void FillCube(Color col,int dred,int dgreen,int dblue) { int group_red=256/dred; int group_green=256/dgreen; int group_blue=256/dblue; int r,g,b; r=col.red/group_red; g=col.green/group_green; b=col.blue/group_blue; cube[r][g][b]++; sieve[r][g][b].push_back({col.red,col.green,col.blue}); } void GetAverageColor(int r,int g,int b,int cnt) { int i; int sumred,sumgreen,sumblue; sumred=0; sumgreen=0; sumblue=0; for(i=0;i pixels[20][20]; void GetMedianColor1(int layer,int bucket) { int i,sz; int sumred,sumgreen,sumblue; sumred=0; sumgreen=0; sumblue=0; sz=(int)pixels[layer][bucket].size(); for(i=0;imaxred) maxred=col.red; if(col.greenmaxgreen) maxgreen=col.green; if(col.bluemaxblue) maxblue=col.blue; } rangered=maxred-minred; rangegreen=maxgreen-mingreen; rangeblue=maxblue-minblue; fl=0; maxrange=rangered; if(rangegreen>maxrange) { fl=1; maxrange=rangegreen; } if(rangeblue>maxrange) { fl=2; maxrange=rangeblue; } if(fl==0) sort(pixels[layer-1][bucket].begin(),pixels[layer-1][bucket].end(),CompareColorsRed); if(fl==1) sort(pixels[layer-1][bucket].begin(),pixels[layer-1][bucket].end(),CompareColorsGreen); if(fl==2) sort(pixels[layer-1][bucket].begin(),pixels[layer-1][bucket].end(),CompareColorsBlue); mid=(sz-1)/2; pos++; for(i=0;i<=mid;i++) pixels[layer][pos].push_back(pixels[layer-1][bucket][i]); pos++; for(i=mid+1;i sector[20]; int cluster[N][N]; Color means[20]; void GetSectorColor(int sec) { int i,sz; int sumred,sumgreen,sumblue; sumred=0; sumgreen=0; sumblue=0; sz=(int)sector[sec].size(); for(i=0;i>m>>n; for(i=1;i<=n;i++) for(j=1;j<=m;j++) cin>>pic[i][j].red>>pic[i][j].green>>pic[i][j].blue; } void Output1() { int i,j; int sz; sz=best_palette.size(); for(i=sz+1;i<=16;i++) best_palette.push_back({0,0,0}); for(i=0;i<16;i++) cout<1) dist+=Distance(pic[x][y],pic[x-1][y]); if(x1) dist+=Distance(pic[x][y],pic[x][y-1]); if(y>temp.red>>temp.green>>temp.blue; palette.push_back(temp); } cin>>m>>n; for(i=1;i<=n;i++) for(j=1;j<=m;j++) { cin>>compression[i][j]; pic[i][j]=palette[compression[i][j]]; } } void Output2() { int i,j; for(i=1;i<=n;i++) for(j=1;j<=m;j++) cout<>indicator; if(indicator==0) { Input1(); BruteForce(); FastSolution(); MedianCut(); Randomize(); Output1(); return 0; } Input2(); ImproveImage(); Output2(); return 0; }