ABC241C,头一次C题切不了。
大意就是黑白网格,让你最多可以把两个格子涂成黑色。然后判断能否让连续六个格子变成黑色(水平垂直对角线都可以)
#include <bits/stdc++.h>
using namespace std;
char s[1005][1005];
signed main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
scanf("%s", &s[i] + 1);
}for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (n - i >= 5) {
int cnt = 0;
if (s[i][j] == '#')cnt++;
if (s[i + 1][j] == '#')cnt++;
if (s[i + 2][j] == '#')cnt++;
if (s[i + 3][j] == '#')cnt++;
if (s[i + 4][j] == '#')cnt++;
if (s[i + 5][j] == '#')cnt++;
if (cnt >= 4) {
cout << "Yes";
return 0;
}
}if (n - j >= 5) {
int cnt = 0;
if (s[i][j] == '#')cnt++;
if (s[i][j + 1] == '#')cnt++;
if (s[i][j + 2] == '#')cnt++;
if (s[i][j + 3] == '#')cnt++;
if (s[i][j + 4] == '#')cnt++;
if (s[i][j + 5] == '#')cnt++;
if (cnt >= 4) {
cout << "Yes";
return 0;
}
}if (n - i >= 5 && n - j >= 5) {
int cnt = 0;
if (s[i][j] == '#')cnt++;
if (s[i + 1][j + 1] == '#')cnt++;
if (s[i + 2][j + 2] == '#')cnt++;
if (s[i + 3][j + 3] == '#')cnt++;
if (s[i + 4][j + 4] == '#')cnt++;
if (s[i + 5][j + 5] == '#')cnt++;
if (cnt >= 4) {
cout << "Yes";
return 0;
}
}if (n - i >= 5 && j >= 6) {
int cnt = 0;
if (s[i][j] == '#')cnt++;
if (s[i + 1][j - 1] == '#')cnt++;
if (s[i + 2][j - 2] == '#')cnt++;
if (s[i + 3][j - 3] == '#')cnt++;
if (s[i + 4][j - 4] == '#')cnt++;
if (s[i + 5][j - 5] == '#')cnt++;
if (cnt >= 4) {
cout << "Yes";
return 0;
}
}
}
}cout << "No";
return 0;
}
8个点不过,是代码细节还是读题原因?
PS:这里暂时还没有题解