Pagini recente » Cod sursa (job #1675365) | Cod sursa (job #2506661) | Cod sursa (job #2395298) | Cod sursa (job #625339) | Cod sursa (job #2482278)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("zone.in");
ofstream fout("zone.out");
int N;
int a[10], v[550][550], l1, l2, c1, c2, s[550][550];
bool Check(int x1, int y1, int x2, int y2) {
int i;
for (i = 1; i <= 9; i++)
if (s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1] == a[i])return true;
return false;
}
bool Check2(int x1, int y1, int x2, int y2) {
int i;
bool ok = 1;
bool viz[10];
for (i = 1; i <= 9; i++)
viz[i]=0;
for (i = 1; i <= 9; i++) {
ok = 0;
if (s[N][N] - s[x2][N] - s[N][y2] + s[x2][y2] == a[i]&&viz[1]==0){ok = 1;viz[1]=1;}
else if (s[N][y2] - s[x2][y2] - s[N][y1] + s[x2][y1] == a[i]&&viz[2]==0){ok = 1;viz[2]=1;}
else if (s[x2][N] - s[x1][N] - s[x2][y2] + s[x1][y2] == a[i]&&viz[3]==0){ok = 1;viz[3]=1;}
else if (s[x2][y2] - s[x1][y2] - s[x2][y1] + s[x1][y1] == a[i]&&viz[4]==0){ok = 1;viz[4]=1;}
else if (s[x1][N] - s[0][N] - s[x1][y2] + s[0][y2] == a[i]&&viz[5]==0){ok = 1;viz[5]=1;}
else if (s[x1][y2] - s[0][y2] - s[x1][y1] + s[0][y1] == a[i]&&viz[6]==0){ok = 1;viz[6]=1;}
else if (s[x1][y1] - s[0][y1] - s[x1][0] + s[0][0] == a[i]&&viz[7]==0){ok = 1;viz[7]=1;}
else if (s[N][y1] - s[x2][y1] - s[N][0] + s[x2][0] == a[i]&&viz[8]==0){ok = 1;viz[8]=1;}
else if (s[x2][y1] - s[x1][y1] - s[x2][0] + s[x1][0] == a[i]&&viz[9]==0){ok = 1;viz[9]=1;}
if (ok == 0) {
//cout << a[i] << " " << s[x2][y1] << "\n";
return false;
}
}
return true;
}
bool Check3(int x1, int y1, int x2)
{
int i;
bool viz[4];
for(i=1;i<=3;i++)viz[i]=0;
int ct = 0,ok=0;
for (i = 1; i <= 9; i++) {ok=0;
if (s[x1][y1] - s[0][y1] - s[x1][0] + s[0][0] == a[i]&&viz[1]==0){ok = 1;viz[1]=1;}
else if (s[N][y1] - s[x2][y1] - s[N][0] + s[x2][0] == a[i]&&viz[2]==0){ok = 1;viz[2]=1;}
else if (s[x2][y1] - s[x1][y1] - s[x2][0] + s[x1][0] == a[i]&&viz[3]==0){ok = 1;viz[3]=1;}
if (ok == 1) ct++;
}
return ct == 3;
}
int main() {
int i, j;
fin >> N;
for (i = 1; i <= 9; i++)
fin >> a[i];
for (i = 1; i <= N; i++)
for (j = 1; j <= N; j++) {
fin >> v[i][j];
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + v[i][j];
}
for (l1 = 1; l1 < N - 1; l1++)
for (c1 = 1; c1 < N - 1; c1++) {
if (Check(1, 1, l1, c1) == 1) {
//cout << "*" << s[l1][c1] << endl;
for (l2 = l1 + 1; l2 < N; l2++) {
if(Check3(l1,c1,l2))
for (c2 = c1 + 1; c2 < N; c2++)
if (Check2(l1, c1, l2, c2)) {
fout << l1 << " " << l2 << " " << c1 << " " << c2;
l1 = N;
l2 = N;
c2 = N;
c1 = N;
break;
}
}
}
}
}