#2
by かずま » 7年前
vow256 さんが書きました: ↑7年前
コード自体は正答であることが分かったのですが、
範囲チェックが間違っていますよ。
if (y + 1 >= 0) ではなく、if (y + 1 < 10) でしょう。
10 x 10 の紙面の周りに幅 2の枠を付けると
範囲チェックは不要になります。
また、x、y、s の読み込みが大袈裟ですね。
私なら次のように書くでしょう。
コード:
#include <iostream>
int v[2+10+2][2+10+2];
int main()
{
int x, y, s, n = 0, m = 0;
char c;
while (std::cin >> x >> c >> y >> c >> s) {
x += 2, y += 2;
v[y-1][x]++, v[y][x-1]++, v[y][x]++, v[y][x+1]++, v[y+1][x]++;
if (s >= 2)
v[y-1][x-1]++, v[y-1][x+1]++, v[y+1][x-1]++, v[y+1][x+1]++;
if (s == 3)
v[y-2][x]++, v[y+2][x]++, v[y][x-2]++, v[y][x+2]++;
}
for (int i = 0+2; i < 10+2; i++)
for (int j = 0+2; j < 10+2; j++) {
if (v[i][j] == 0) n++;
if (v[i][j] > m) m = v[i][j];
}
std::cout << n << '\n' << m << '\n';
}
[quote=vow256 post_id=150463 time=1523777326 user_id=2685]
コード自体は正答であることが分かったのですが、[/quote]
範囲チェックが間違っていますよ。
if (y + 1 >= 0) ではなく、if (y + 1 < 10) でしょう。
10 x 10 の紙面の周りに幅 2の枠を付けると
範囲チェックは不要になります。
また、x、y、s の読み込みが大袈裟ですね。
私なら次のように書くでしょう。
[code]
#include <iostream>
int v[2+10+2][2+10+2];
int main()
{
int x, y, s, n = 0, m = 0;
char c;
while (std::cin >> x >> c >> y >> c >> s) {
x += 2, y += 2;
v[y-1][x]++, v[y][x-1]++, v[y][x]++, v[y][x+1]++, v[y+1][x]++;
if (s >= 2)
v[y-1][x-1]++, v[y-1][x+1]++, v[y+1][x-1]++, v[y+1][x+1]++;
if (s == 3)
v[y-2][x]++, v[y+2][x]++, v[y][x-2]++, v[y][x+2]++;
}
for (int i = 0+2; i < 10+2; i++)
for (int j = 0+2; j < 10+2; j++) {
if (v[i][j] == 0) n++;
if (v[i][j] > m) m = v[i][j];
}
std::cout << n << '\n' << m << '\n';
}
[/code]