上午比赛第一题:https://www.luogu.com.cn/problem/P8546
代码:
#include <iostream>
using namespace std;
const int N = 110;
int n;
string s[N];
bool check(int x, int y) {
if (x <= 0) return false;
if (x > n) return false;
if (y <= 0) return false;
if (y > n) return false;
if (s[x][y] == '0') return false;
return true;
}
int find(int i, int j) {
int num = 0;
int x = i - 1, y = j - 1;
int xx = i - 1, yy = j + 1;
int xxx = i + 1, yyy = j - 1;
int xxxx = i + 1, yyyy = j + 1;
while (check(x, y) && check(xx, yy) && check(xxx, yyy) && check(xxxx, yyyy)) {
num++;
x--, y--;
xx--, yy++;
xxx++, yyy--;
xxxx++, yyyy++;
}
return num;
}
int find1(int i, int j) {
int num = 0;
int x = i - 1, y = j - 1;
int xx = i - 1, yy = j;
int xxx = i, yyy = j - 1;
int xxxx = i, yyyy = j;
while (check(x, y) && check(xx, yy) && check(xxx, yyy) && check(xxxx, yyyy)) {
num++;
x--, y--;
xx--, yy++;
xxx++, yyy--;
xxxx++, yyyy++;
}
return num;
}
int main() {
cin >> n;
getline(cin, s[0]);
for (int i = 1; i <= n; i++) {
getline(cin, s[i]);
s[i] = ' ' + s[i];
}
int ans = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
ans += find(i, j);
ans += find1(i, j);
}
}
cout << ans << endl;
return 0;
}
求调/hack /kel