Pagini recente » Cod sursa (job #2355584) | Cod sursa (job #153585) | Cod sursa (job #648468) | Cod sursa (job #3207651) | Cod sursa (job #19947)
Cod sursa(job #19947)
#include <stdio.h>
const int S_MAX = 16;
const int N_MAX = 550;
const int INF = 2000000000;
int a[N_MAX][N_MAX];
int s[S_MAX], nr = 0;
struct sum {
int sm, unu, doi, trei;
} par[S_MAX * S_MAX * S_MAX];
int main()
{
freopen("zone.in", "r", stdin);
freopen("zone.out", "w", stdout);
int N, i, j, k;
scanf("%d\n", &N);
for (i = 1; i <= 9; i ++) {
scanf("%d ", &s[i]);
}
for (i = 1; i <= N; i ++) {
for (j = 1; j <= N; j ++) {
scanf("%d ", &a[i][j]);
}
}
for (i = 1; i <= 7; i ++) {
for (j = i + 1; j <= 8; j ++) {
for (k = j + 1; k <= 9; k ++) {
par[++ nr].sm = s[i] + s[j] + s[k];
par[nr].unu = s[i];
par[nr].doi = s[j];
par[nr].trei = s[k];
}
}
}
int poz = 0, suma = 0, l1 = 0, l2 = 0, c1 = INF, c2 = 0;
for (i = 1; i <= N && !poz; i ++) {
for (j = 1; j <= N; j ++) {
suma += a[i][j];
}
for (k = 1; k <= nr; k ++) {
if (par[k].sm == suma) {
par[k].sm = -1;
poz = k;
l1 = i;
break;
}
}
}
suma = 0;
int caut = par[poz].unu;
par[poz].unu = 0;
for (i = 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (suma == caut){
c1 = i;
break;
}
}
suma = 0;
for (i = c1 + 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (par[poz].unu == suma || par[poz].doi == suma || par[poz].trei == suma && i <= c2) {
c2 = i;
break;
}
}
par[poz].unu = caut;
suma = 0;
caut = par[poz].doi, par[poz].doi = 0;
for (i = 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (suma == caut && i < c1){
c1 = i;
break;
}
}
suma = 0;
for (i = c1 + 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (par[poz].unu == suma || par[poz].doi == suma || par[poz].trei == suma && i <= c2) {
c2 = i;
break;
}
}
par[poz].doi = caut;
suma = 0;
caut = par[poz].trei, par[poz].trei = 0;
for (i = 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (suma == caut && i < c1){
c1 = i;
break;
}
}
suma = 0;
for (i = c1 + 1; i <= N; i ++) {
for (j = 1; j <= l1; j ++) {
suma += a[j][i];
}
if (par[poz].unu == suma || par[poz].doi == suma || par[poz].trei == suma && i <= c2) {
c2 = i;
break;
}
}
par[poz].trei = caut;
suma = 0;
for (i = l1 + 1; i <= N; i ++) {
for (j = 1; j <= N; j ++) {
suma += a[i][j];
}
for (k = 1; k <= nr; k ++) {
if (suma == par[k].sm) {
l2 = i;
}
}
}
printf("%d %d %d %d\n", l1, l2, c1, c2);
return 0;
}