很简单,直接ac:
1 #include "iostream" 2 3 using namespace std; 4 5 int n, t, tag = 1; 6 int main() 7 { 8 cin >> n; 9 10 if (n % 2 == 1)11 t = n;12 else13 t =n+ 1;14 15 for (int i = 0; i < t; i++)16 {17 cout << n;18 }19 cout << endl;20 21 for (int i = 0; i < n; i++)22 {23 for (int j = 1; j <= t; j++)24 {25 if (j == (t / 2 + 1))26 {27 cout << tag++;28 continue;29 }30 cout << n;31 32 }33 cout << endl;34 }35 }
2
思路:
dfs,找出联通的房子,再判断对角是否为空地
1 #include "iostream" 2 #include "vector" 3 using namespace std; 4 5 char s[101][101]; 6 int N, M; 7 int di[4] = { 1, -1, 0, 0 }; 8 int dj[4] = { 0, 0, 1, -1 }; 9 vector area;10 11 int dfs(int i, int j, int *mini, int *minj, int *maxi, int *maxj) {12 if (i < *mini)13 *mini = i;14 if (i > *maxi)15 *maxi = i;16 if (j < *minj)17 *minj = j;18 if (j > *maxj)19 *maxj = j;20 s[i][j] = 'x';21 int a = 1;22 for (int d = 0; d < 4; ++d) {23 int ni = i + di[d], nj = j + dj[d];24 if (s[ni][nj] == '1')25 a += dfs(ni, nj, mini, minj, maxi, maxj);26 }27 return a;28 }29 30 bool isBeauty(int mini, int minj, int maxi, int maxj)31 {32 if (s[mini - 1][minj - 1] == '0'33 &&s[mini - 1][maxj + 1] == '0'34 &&s[maxi + 1][minj - 1] == '0'35 &&s[maxi + 1][maxj + 1] == '0')36 return true;37 else38 return false;39 }40 41 int main() {42 cin >> N >> M;43 memset(s, '0', sizeof(s));44 for (int i = 0; i < N; ++i)45 cin >> s[i + 1] + 1;46 47 int n1 = 0, n2 = 0;48 for (int i = 1; i <= N; ++i)49 for (int j = 1; j <= M; ++j)50 if (s[i][j] == '1') {51 n1++;52 int mini = i, maxi = i, minj = j, maxj = j;53 int s = dfs(i, j, &mini, &minj, &maxi, &maxj);54 area.push_back(s);55 if (isBeauty(mini, minj, maxi, maxj))56 n2++;57 }58 cout << n2 << endl;59 60 system("pause");61 return 0;62 }