Untitled
unknown
plain_text
a year ago
2.3 kB
6
Indexable
Never
#include <stdio.h> #define size 100 int n, a[size][size], b[size][size]; void updateA (){ for (int i = 1; i <= n; i++){ for (int j = 1; j <=n; j++){ if (a[i][j] != b[i][j]) a[i][j] = b[i][j]; } } } int main(){ freopen("input.txt", "r", stdin); int year = 0, i, j, x, y; scanf("%d", &n); for (i = 1; i <= n; i++){ for (j = 1; j <=n; j++){ scanf("%d", &a[i][j]); b[i][j] = a[i][j]; } } bool haveChange = true; while (haveChange){ haveChange = false; for (i = 2; i < n; i++){ for (j = 2; j < n; j++){ if (a[i][j] == 0 && (a[i+1][j] + a[i-1][j] + a[i][j-1] + a[i][j+1]) == 1) { haveChange = true; // 4 directions if (a[i+1][j]==1){ x=i; y=j; while (a[++x][y]==1 && x <= n) b[x][y]=0; } else if (a[i-1][j]==1){ x=i; y=j; while (a[--x][y]==1 && x >=1) b[x][y]=0; } else if (a[i][j+1]==1){ x=i; y=j; while (a[i][++y]==1 && y<=n) b[x][y]=0; } else if (a[i][j-1] == 1){ x=i; y=j; while (a[i][--y]==1 && y >=1) b[x][y]=0; } } } } if (haveChange) year++; updateA (); } printf("%d", year); return 0; }Cho một hình vuông NxN ô nhỏ (5 ≤ N ≤ 9), mỗi ô chứa 1 số từ 0 – 9. Nhiệm vụ cần làm là cắt hình vuông lớn thành (N+1) hình có kích thước 1x(N-1). Mỗi hình kích thước 1x(N-1) bao gồm (N-1) chữ số và tạo thành 1 số nguyên (N-1) chữ số (đọc từ trái qua phải hoặc từ trên xuống dưới tùy theo phương án cắt). Sau khi có được các miếng cắt, tính tổng các số thu được (chỉ tính các số có N-1 chữ số, ô còn sót lại sẽ không được tính vào tổng). Hãy tìm ra phương án cắt có tổng thu được lớn nhất. Dòng đầu tiên của mỗi test cases là kích thước hình vuông N (5 ≤ N ≤ 9) N dòng tiếp theo lần lượt là giá trị trong các ô nhỏ của hình vuông lớn. Output Với mỗi test case, in ra tổng số lớn nhất thu được Sample Input 2 5 1 0 3 5 6 4 5 3 7 9 7 2 2 6 7 3 4 7 8 8 9 5 1 6 3 6 3 4 5 6 8 6 3 5 6 7 7 8 3 3 3 3 3 5 1 2 5 6 4 2 3 3 5 5 5 7 8 5 3 6 9 9 Output #1 35000 #2 72000