10026号赤い薬水
最近はsk hyonixの原書と英語でcoteができなかったので少しやらなくても、感覚が失われます.がんばってください!
この問題はかなり簡単だ.すくい取るには領域を区別する必要があるのでqueueを使用し、brootforceで囲み、個々に位置決めする必要があります.
この問題はかなり簡単だ.すくい取るには領域を区別する必要があるのでqueueを使用し、brootforceで囲み、個々に位置決めする必要があります.
#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#include <string.h>
using namespace std;
char map[100][100];
int ch[100][100];
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
struct Loc {
int x, y;
Loc(int a, int b) {
x = a;
y = b;
}
};
int main() {
int n;
//freopen("in1.txt", "rt", stdin);
cin >> n;
for (int i = 0; i < n; i++) {
cin >> map[i];
}
queue<Loc> Q;
int cnt1 = 0;
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
if (ch[x][y] == 0) {
Q.push(Loc(x, y));
cnt1++;
while (!Q.empty()) {
Loc tmp = Q.front();
Q.pop();
for (int i = 0; i < 4; i++) {
int xx = tmp.x + dx[i];
int yy = tmp.y + dy[i];
if (xx < 0 || xx >= n || yy < 0 || yy >= n) continue;
if (ch[xx][yy] == 0 && map[xx][yy] == map[tmp.x][tmp.y]) {
ch[xx][yy] = 1;
Q.push(Loc(xx, yy));
}
}
}
}
}
}
memset(ch, 0, sizeof(ch));
int cnt2 = 0;
for (int x = 0; x < n; x++) {
for (int y = 0; y < n; y++) {
if (ch[x][y] == 0) {
Q.push(Loc(x, y));
cnt2++;
while (!Q.empty()) {
Loc tmp = Q.front();
Q.pop();
for (int i = 0; i < 4; i++) {
int xx = tmp.x + dx[i];
int yy = tmp.y + dy[i];
if (xx < 0 || xx >= n || yy < 0 || yy >= n) continue;
if (ch[xx][yy] == 0) {
if ((map[tmp.x][tmp.y] == 'R' && map[xx][yy] == 'G') || (map[tmp.x][tmp.y] == 'G' && map[xx][yy] == 'R') || map[xx][yy] == map[tmp.x][tmp.y]) {
ch[xx][yy] = 1;
Q.push(Loc(xx, yy));
}
}
}
}
}
}
}
cout << cnt1 << " " << cnt2 << '\n';
return 0;
}
Reference
この問題について(10026号赤い薬水), 我々は、より多くの情報をここで見つけました https://velog.io/@ehdgus5094/10026번-적록색약テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol