Pagini recente » Cod sursa (job #1226964) | Cod sursa (job #1686581) | Cod sursa (job #2610214) | Cod sursa (job #1179519) | Cod sursa (job #1829990)
#include <fstream>
#define f first
#define s second
using namespace std;
int n, i, j, t, sol[1001], v[1001][1001], d[1001][1001][1001];
pair <int, int> c[1000005];
ifstream fin("custi.in");
ofstream fout("custi.out");
int main(){
fin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
fin>>v[i][j];
if(v[i][j]){
sol[1]++;
c[sol[1]].f=i;
c[sol[1]].s=j;
d[i][j][1]=1;
}
}
fout<<sol[1]<<"\n";
m=sol[1];
// 0, daca submatricea k*k care incepe din (i;j) nu e plina de 1
// d[i][j][k]=
// 1, daca submatricea k*k care incepe din (i;j) e plina de 1
//in acest scop verificam daca marginile imediat exterioare ale submatricei (k-1)*(k-1) contin numai 1
//
for(t=1;t<=m;t++){
for(a=2;a<=n;a++){
char ok=1;
if(d[c[t].f][c[t].s][a-1]==0)
d[c[t].f][c[t].s][a]=0;
else{
for(i=c[t].f;i<=c[t].f+a;i++)
if(v[i][c[t].s]==0){
d[c[t].f][c[t].s][a]=0;
ok=0;
}
if(ok)
for(j=c[t].s;j<=c[t].s+a;j++)
if(v[c[t].f][j]==0)
d[c[t].f][c[t].s][a]=0;
}
sol[a]+=d[c[t].f][c[t].s][a];
}
}
return 0;
}