白駿1018
白准1018:重新涂上棋盘。
あらかじめ2つのボードを入力:Wから始まるボードとBから始まるボード
入力された配列を8 X 8にカットし,最初のチェス盤と比較した.
各色ごとにcountを行い、最小の場合に出力します.
#include <iostream>
using namespace std;
int N, M;
string in[51], cand[51];
int ans=2500;
int intoBW(string bw[8], string in[50]) {
int count=0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(bw[i][j] != in[i][j]) {
count++;
}
}
}
return count;
}
int intoWB(string wb[8], string in[50]) {
int count=0;
for(int i=0; i<8; i++) {
for(int j=0; j<8; j++) {
if(wb[i][j] != in[i][j]) {
count++;
}
}
}
return count;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
string bw[8] = {
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB"
};
string wb[8] = {
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW",
"WBWBWBWBWB",
"BWBWBWBWBW"
};
cin>>N>>M;
for(int i=0; i<=N; i++) {
getline(cin, in[i]);
}
for(int i=0; i<=N-8; i++) {
for(int j=0; j<=M-8; j++) {
for(int k=0; k<8; k++) {
cand[k] = in[i+k+1].substr(j, j+8);
}
int a=intoBW(bw, cand);
int b=intoWB(wb, cand);
if(min(a, b) < ans) {
ans = min(a, b);
}
}
}
cout<<ans<<"\n";
return 0;
}
Reference
この問題について(白駿1018), 我々は、より多くの情報をここで見つけました https://velog.io/@msdio/백준-1018テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol