求助站外题
  • 板块学术版
  • 楼主wizardMarshall
  • 当前回复6
  • 已保存回复6
  • 发布时间2022/11/11 19:23
  • 上次更新2023/10/27 03:23:20
查看原帖
求助站外题
474470
wizardMarshall楼主2022/11/11 19:23

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:这里暂时还没有题解

2022/11/11 19:23
加载中...