Submission #2866076
Source Code Expand
// header file
#include <iostream>
#include <cstdio>
#include <vector> //vector<T> vec; ランダムアクセスが速い、挿入は線形時間
#include <list> //list<T> ls; 挿入・消去速い、アクセスは線形時間
#include <algorithm>
#include <functional> // greater<int>()を使える
#include <utility>
#include <string>
#include <map>
// macro
#define REP(i, n) for (int i=0; i < (int)(n); i++) // 0 ~ n-1
#define REPN(i, n) for (int i=1; i <= (int)(n); i++) // 1 ~ n
#define R_REP(i, n) for(int i = ((int)(n - 1)); i >= 0; i--) // Reverse n-1 ~ 0
#define R_REPN(i, n) for(int i= ((int)(n));i > 0;i--) // Reverse n ~ 1
#define FOR(i, m, n) for(int i = m;i < n;i++) // 指定範囲loop m ~ n-1
#define pb(vec) push_back(vec) // 配列の一番うしろに追加
// typedef
typedef long long ll; // int64
using namespace std;
// prototype declaration
void stdout_matrix(int, int, vector< vector<int> >);
vector< vector<int> > minesweeper(int, int, vector< vector<int> >);
int main(void) {
int H, W; // row:H, column:W
cin >> H >> W;
// 各マス目の文字列の取得
string S_i;
vector< vector<int> > S_int(H, vector<int>(W)); // H行 W列
REP(i, H) {
std::cin >> S_i;
REP(j, W) {
//DEBUG REP(j, W) std::cout << S_i[j] << std::endl;
if (S_i[j] == '.') { // 単一文字のため single quotation を使う
// 入力した文字の変換 .=0, #(bomb)=1
S_int[i][j] = 0;
} else {
S_int[i][j] = 1;
}
}
}
//DEBUG stdout_matrix(H, W, S_int);
// ここまでで爆弾の数値行列の完成
// 爆弾の数計算
vector< vector<int> > mineMatrix(H, vector<int>(W)); // H行 W列
mineMatrix = minesweeper(H, W, S_int);
//OKだった stdout_matrix(H, W, mineMatrix);
REP(i, H) {
REP(j, W) {
if (mineMatrix[i][j] == 9) {
std::cout << "#";
} else {
std::cout << mineMatrix[i][j];
}
}
std::cout << std::endl;
}
return 0;
}
// 周囲8マスの爆弾数を返す
vector< vector<int> > minesweeper(int H,int W, vector< vector<int> > Matrix) {
vector< vector<int> > mineMatrix(H, vector<int>(W)); // H行 W列
// 行数:H, 列数:W
REP(i, H) {
REP(j, W) {
// 爆弾ではない時
if (Matrix[i][j] == 0) {
if (i == 0) { // 0行
if(j == 0) { // 最初の行 左上
mineMatrix[i][j] = Matrix[0][1] + Matrix[1][0] + Matrix[1][1];
} else if (j == W - 1) { // 最初の行 右上
mineMatrix[i][j] = Matrix[i][j-1] + Matrix[i+1][j-1] + Matrix[i+1][j];
} else { // 周囲が 下5マス
mineMatrix[i][j] = Matrix[i][j-1] + Matrix[i][j+1] + Matrix[i+1][j-1] + Matrix[i+1][j] + Matrix[i+1][j+1];
}
} else if (i == H - 1) { // 第 H 行
if(j == 0) { // 最後の行 左下
mineMatrix[i][j] = Matrix[i-1][0] + Matrix[i-1][1] + Matrix[i][1];
} else if (j == W - 1) { // 最後の行 右下
mineMatrix[i][j] = Matrix[i][j-1] + Matrix[i-1][j-1] + Matrix[i-1][j];
} else { // 周囲が 上5マス
mineMatrix[i][j] = Matrix[i][j-1] + Matrix[i][j+1] + Matrix[i-1][j-1] + Matrix[i-1][j] + Matrix[i-1][j+1];
}
} else if (j == 0) { // 周囲が 右5マス
mineMatrix[i][j] = Matrix[i-1][j] + Matrix[i+1][j] + Matrix[i-1][j+1] + Matrix[i][j+1] + Matrix[i+1][j+1];
} else if (j == W - 1) { // 周囲が 左5マス
mineMatrix[i][j] = Matrix[i-1][j] + Matrix[i+1][j] + Matrix[i-1][j-1] + Matrix[i][j-1] + Matrix[i+1][j-1];
} else { // その他周りが8マス
mineMatrix[i][j] = Matrix[i][j-1] + Matrix[i][j+1] \
+ Matrix[i-1][j-1] + Matrix[i-1][j] + Matrix[i-1][j+1] \
+ Matrix[i+1][j-1] + Matrix[i+1][j] + Matrix[i+1][j+1];
}
// 爆弾の時
} else {
mineMatrix[i][j] = 9;
}
}
}
return mineMatrix;
}
void stdout_matrix(int N, int M, vector< vector<int> > Matrix) {
REP(i, N) {
REP(j, M){
std::cout << Matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
Submission Info
Submission Time |
|
Task |
B - Minesweeper |
User |
nukopy |
Language |
C++14 (GCC 5.4.1) |
Score |
0 |
Code Size |
4769 Byte |
Status |
RE |
Exec Time |
98 ms |
Memory |
256 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
0 / 200 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt, sample_03.txt |
All |
sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_2.txt, subtask_1_3.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
1 ms |
256 KB |
sample_02.txt |
AC |
1 ms |
256 KB |
sample_03.txt |
AC |
1 ms |
256 KB |
subtask_1_1.txt |
AC |
2 ms |
256 KB |
subtask_1_10.txt |
AC |
2 ms |
256 KB |
subtask_1_11.txt |
AC |
1 ms |
256 KB |
subtask_1_12.txt |
AC |
1 ms |
256 KB |
subtask_1_2.txt |
AC |
1 ms |
256 KB |
subtask_1_3.txt |
AC |
1 ms |
256 KB |
subtask_1_4.txt |
RE |
98 ms |
256 KB |
subtask_1_5.txt |
WA |
1 ms |
256 KB |
subtask_1_6.txt |
AC |
1 ms |
256 KB |
subtask_1_7.txt |
AC |
1 ms |
256 KB |
subtask_1_8.txt |
AC |
1 ms |
256 KB |
subtask_1_9.txt |
RE |
98 ms |
256 KB |