/* ID: xo1 LANG: C++ TASK: paint2 */ #include int main () { FILE *fin = fopen ("paint2.in", "r"); FILE *fout = fopen ("paint2.out", "w"); int n, k; fscanf (fin, "%d %d", &n, &k); int x[k], y[k]; for ( int i = 0; i < k ; i++ ) fscanf (fin, "%d %d", &(x[i]), &(y[i])); int grid[n][n]; for ( int i = 0; i < n ; i++ ) for ( int j = 0; j < n ; j++ ) grid[i][j] = 0; for ( int i = 0; i < k ; i++ ) printf("%d %d\n", x[i], y[i]); puts(""); for ( int i = 0; i < k ; i++ ) for ( int j = 0; j < n ; j++ ) { grid[x[i]-1][j]++; } for ( int i = 0; i < k ; i++ ) for ( int j = 0; j < n ; j++ ) { if ( j != x[i]-1 ) grid[j][y[i]-1]++; } { int edgex[k], edgey[k]; for ( int i = 0; i < k ; i++ ) edgex[i] = x[i]; for ( int i = 0; i < k ; i++ ) edgey[i] = y[i]; for ( int i = 0; i < k ; i++ ) while (edgex[i] && edgey[i]) { edgex[i]--; edgey[i]--; } for ( int i = 0; i < k ; i++ ) for ( int j = 0; edgex[i]+j < n && edgey[i]+j < n ; j++ ) { if (( edgex[i]-j != x[i]-1 ) && ( edgey[i]+j != y[i]-1 )) { //printf("%d %d\n", edgex[i]+j, edgex[i]+j); grid[edgex[i]+j][edgey[i]+j]++; } } /*for ( int d = 0; d < k ; d++ ) printf("%d %d\n", x[i], y[i]); puts("");*/ } { int edgex[k], edgey[k]; for ( int i = 0; i < k ; i++ ) edgex[i] = x[i]; for ( int i = 0; i < k ; i++ ) edgey[i] = y[i]; for ( int i = 0; i < k ; i++ ) while (edgex[i] < n && edgey[i]-1) { edgex[i]++; edgey[i]--; } /*for ( int i = 0; i < k ; i++ ) printf("%d %d\n", edgex[i], edgey[i]); puts("");*/ for ( int i = 0; i < k ; i++ ) { int q = edgex[i]-1, w = edgey[i]-1; while ( q+1 && w < n ) { if ( q != x[i]-1 && w != y[i]-1 ) { //printf("%d %d\n", q, w); grid[q][w]++; } q--; w++; } } } for ( int i = 0; i < n ; i++ ) { for ( int j = 0; j < n ; j++ ) printf("%d ", grid[i][j]); puts(""); } puts(""); int cnt = 0; for ( int i = 0; i < n ; i++ ) { for ( int j = 0; j < n ; j++ ) if ( grid[i][j] == k ) cnt++; } fprintf(fout, "%d\n", cnt); return (0); }