Cod sursa(job #1649426)
Utilizator | Data | 11 martie 2016 13:37:45 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 10.99 kb |
#include <fstream>
#include <queue>
using namespace std;
ifstream fin ("ferma3.in");
ofstream fout ("ferma3.out");
struct ferma
{
char c;
int n;
} f[455][455];
queue <int> qx,qy;
int a[160010];
void fil(int i, int j, int&ct1, char t, int nr, int n3, int m1)
{
/*if(i==87 && j==58)
int stop=1;
*/queue <int> qx1, qy1;
int ct=0;
if(f[i][j].n==m1*n3+1)
{
f[i][j].n=nr;
}
else
{
ct1=0;
return;
}
qx1.push(i);
qy1.push(j);
ct1=1;
while(!qx1.empty())
{
ct=0;
int xc=qx1.front();
qx1.pop();
int yc=qy1.front();
qy1.pop();
int xv=xc;
int yv=yc+1;
if(f[xv][yv].c==t && f[xv][yv].n!=nr)
{
ct1++;
f[xv][yv].n=nr;
qx1.push(xv);
qy1.push(yv);
}
if(f[xv][yv].c!=t)
ct++;
xv=xc;
yv=yc-1;
if(f[xv][yv].c==t && f[xv][yv].n!=nr)
{
//ct++;
ct1++;
f[xv][yv].n=nr;
qx1.push(xv);
qy1.push(yv);
}
if(f[xv][yv].c!=t)
ct++;
xv=xc+1;
yv=yc;
if(f[xv][yv].c==t && f[xv][yv].n!=nr)
{
//ct++;
ct1++;
f[xv][yv].n=nr;
qx1.push(xv);
qy1.push(yv);
}
if(f[xv][yv].c!=t)
ct++;
xv=xc-1;
yv=yc;
if(f[xv][yv].c==t && f[xv][yv].n!=nr)
{
//ct++;
ct1++;
f[xv][yv].n=nr;
qx1.push(xv);
qy1.push(yv);
}
if(f[xv][yv].c!=t)
ct++;
if(ct>1)
{
qx.push(xc);
qy.push(yc);
}
}
a[nr]=ct1;
}
int main()
{
int m, n3, v, s, n1=0, x, y, m1, n4;
char t;
fin>>v>>n3>>m;
for(int i=1; i<=n3; i++)
for(int j=1; j<=m; j++)
{
fin>>f[i][j].c;
f[i][j].n=m*n3+1;
}
m1=m;
n4=n3;
int nr=1;
s=0;
for(int i=1; i<=n3; i++)
for(int j=1; j<=m; j++)
{
/* lee(i,j,x,n3,m);
s=x;
*/t=f[i][j].c;
fil(i,j,s,t,nr,n3,m);
if(s)
if(s!=0)
nr++;
if(n1<s)
n1=s;
}
/* for(int i=1; i<=n3; i++)
{
for(int j=1; j<=m; j++)
{
fout<<f[i][j].n<<' ';
}
fout<<'\n';
}
for(int i=1; i<=nr+1; i++)
fout<< a[i]<<' ';
while(!qx.empty())
{
fout<<qx.front()<<' '<<qy.front();
fout<<'\n';
qx.pop();
qy.pop();
}
*/
if(v==1)
fout<<n1<<'\n';
else
{
int n2=0;
while(!qx.empty())
{
int i=qx.front();
qx.pop();
int j=qy.front();
qy.pop();
if(f[i][j+1].c==f[i][j-1].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i][j-1].n)
s=a[f[i][j-1].n]+1;
else
s=a[f[i][j+1].n]+a[f[i][j-1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i+1][j].c==f[i-1][j].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i-1][j].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i-1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
if(f[i][j+1].c==f[i+1][j].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i+1][j].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i][j+1].n]+a[f[i+1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i][j+1].c==f[i-1][j].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i-1][j].n)
s=a[f[i][j+1].n]+1;
else
s=a[f[i][j+1].n]+a[f[i-1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i+1][j].c==f[i][j+1].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i][j+1].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i][j+1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
if(f[i+1][j].c==f[i][j-1].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i][j-1].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i][j-1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
}
/* int n2=0;
for(int i=1;i<=n4;i++)
for(int j=1;j<=m1;j++)
{
if(f[i][j+1].c==f[i][j-1].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i][j-1].n)
s=a[f[i][j-1].n]+1;
else
s=a[f[i][j+1].n]+a[f[i][j-1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i+1][j].c==f[i-1][j].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i-1][j].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i-1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
if(f[i][j+1].c==f[i+1][j].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i+1][j].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i][j+1].n]+a[f[i+1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i][j+1].c==f[i-1][j].c)
if(f[i][j+1].c!=f[i][j].c)
{
if(f[i][j+1].n==f[i-1][j].n)
s=a[f[i][j+1].n]+1;
else
s=a[f[i][j+1].n]+a[f[i-1][j].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i][j+1].c;
}
}
if(f[i+1][j].c==f[i][j+1].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i][j+1].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i][j+1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
if(f[i+1][j].c==f[i][j-1].c)
if(f[i+1][j].c!=f[i][j].c)
{
if(f[i+1][j].n==f[i][j-1].n)
s=a[f[i+1][j].n]+1;
else
s=a[f[i+1][j].n]+a[f[i][j-1].n]+1;
if(n2<s)
{
n2=s;
n3=i;
m=j;
t=f[i+1][j].c;
}
}
}*/
fout<<n3<<' '<<m<<'\n';
fout<<t;
}
/* {
while(!qx.empty())
{
char t=f[b][d].c
int b=qx.front();
qx.pop();
int d=qy.front();
qy.pop();
if(f[b][d+1].c!=t && f[b][d-1].c!=t)
{
}
if(f[b][d+1].c!=t && f[b+1][d].c!=t)
{
}
}
}*/
return 0;
}