Submission #76668

#TimeUsernameProblemLanguageResultExecution timeMemory
76668Bodo171Art Class (IOI13_artclass)C++14
45 / 100
1584 ms11516 KiB
#include "artclass.h"
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int i,j;
const int nmax=505;
long double sumR,sumG,sumB,cate;
long double d[4][4]={{1708.66,1500.83,1326.18},{925.686,883.002,578.071},{1265.28,1156.13,963.276},{1422.97,807.953,497.835}};
long double a[4];
bool busit[4];
int viz[505][505],r[nmax][nmax],g[nmax][nmax],b[nmax][nmax];
long double d0,d1,d2,d3,dR,culoare;
int mn,blanks,cc,n,m,col;
int dl[]={-1,0,1,0};
int dc[]={0,-1,0,1};
long double dist(long double unu[4],long double doi[4])
{
     d0=unu[0]/unu[1];
     d1=unu[0]/unu[2];
     d2=doi[0]/doi[1];
     d3=doi[0]/doi[2];
     dR=unu[1]/unu[2]-doi[1]/doi[2];
     d0-=d2;d1-=d3;
     return (d0*d0+d1*d1+dR*dR);
}
int abss(int A)
{
    if(A<0) return -A;
    return A;
}
void filll(int li,int ci)
{
    cc++;viz[li][ci]=1;int lf,cf;
    for(int ii=0;ii<4;ii++)
    {
        lf=li+dl[ii];
        cf=ci+dc[ii];
        if((!viz[lf][cf])&&lf>0&&cf>0&&lf<=n&&cf<=m&&abss(r[lf][cf]-col)<=3&&abss(g[lf][cf]-g[li][ci])<=3&&abss(b[lf][cf]-b[li][ci])<=3)
            filll(lf,cf);
    }
}
int style(int H, int W, int R[500][500], int G[500][500], int B[500][500]) {
    for(i=0;i<H;i++)
        for(j=0;j<W;j++)
    {
        sumR+=R[i][j];
        sumG+=G[i][j];
        sumB+=B[i][j];
        r[i+1][j+1]=R[i][j];
        g[i+1][j+1]=G[i][j];
        b[i+1][j+1]=B[i][j];
    }
    n=H;m=W;
    for(col=0;col<256;col++)
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
              viz[i][j]=0;
        for(i=1;i<=n;i++)
         for(j=1;j<=m;j++)
        if(!viz[i][j])
       {
        cc=0;
        filll(i,j);
        if(cc>H*W/10)
            busit[1]=busit[2]=1;
       }
    }
    cate=H*W;
    a[0]=sumR/cate;a[1]=sumG/cate;a[2]=sumB/cate;mn=0;
    culoare=a[0]+a[1]+a[2];
    for(i=0;i<4;i++)
    {
        if((!busit[i])&&dist(a,d[i])<dist(a,d[mn]))
          mn=i;
    }
    mn++;
    return mn;
}
#Verdict Execution timeMemoryGrader output
Fetching results...