Pagini recente » Cod sursa (job #1996348) | Cod sursa (job #1953346) | Istoria paginii runda/cade_copacul | Cod sursa (job #2360041) | Cod sursa (job #1298870)
#include <cstdio>
using namespace std;
char c[1002][1002];
int N,nrp;
void Read(){
scanf("%d\n",&N);
for(int i = 1; i <= N; ++i)
{
fgets(c[i]+1,1002,stdin);
c[i][0] = '#';
}
}
int check(int x,int y,int k)
{
for(int i = 0; i < k; ++i)
for(int j = 0; j < k; ++j)
{
if(c[x-k + i][y-k + j] != c[x+k -i][y-k +j])/// orizontala sus
return 0;
if(c[x-k + i][y+k - j] != c[x-k +i][y+k -j])/// orizontala jos
return 0;
if(c[x-k + i][y-k + j] != c[x-k +i][y+k -j]) /// verticala stanga
return 0;
if(c[x+k - i][y-k + j] != c[x+k -i][y+k -j]) /// verticala dreapta
return 0;
}
return 1;
}
void square(int x,int y) /// c[x][y] e centrul
{
for(int k = 1; k <= N/2; ++k)
{
if(x + k > N || x - k < 1 || y + k > N || y - k < 1)
return; /// imposibil
if(c[x+k][y] == c[x-k][y] && c[x][y+k] == c[x][y-k]) /// e bine in cruce
if(c[x+k][y+k] == c[x-k][y+k] && c[x+k][y-k] == c[x-k][y-k]) /// e bine si pe diagonale
if(check(x,y,k))
++nrp;
}
}
void Solve(){
for(int i = 1; i <= N; ++i)
for(int j = 1; j <= N; ++j)
square(i,j);
nrp += N*N;
printf("%d\n",nrp);
}
int main()
{
freopen("pscpld2d.in","r",stdin);
freopen("pscpld2d.out","w",stdout);
Read();
Solve();
return 0;
}