以下の問題を解いているのですがわからない箇所があります
https://atcoder.jp/contests/abc230/tasks/abc230_c
・max(1−A,1−B)≤k≤min(N−A,N−B) をみたす全ての整数 k について、(A+k,B+k) を黒く塗る。
とあるので解として表示する必要がある行x(A+k=x)列y(B+k=y)のkがmax(1−A,1−B)≤k≤min(N−A,N−B) であれば黒く塗るというようにプログラムを作成しました
実際はコメントアウト行に存在するx - B == y - Aという条件文がないと正確な答えにならないそうです。
ですが何故この条件文が新たに必要になっているのかが全然わからないです。
c++
1 2 if (std::max(1 - A, 1 - B) <= (x - B) && x - B <= std::min(N - A, N - B) { 3 && std::max(1 - A, 1 - B) <= (y - A) && y - A <= std::min(N - A, N - B)) 4 //&& std::max(1 - A, 1 - B) <= (y - A) && y - A <= std::min(N - A, N - B) && x - B == y - A){ 5 vec[i][j] = '#'; 6 } 7
作成したコードの全体はこんな感じです。
c++
1#include <iostream> 2#include <vector> 3#include <algorithm> 4 5int main() { 6 std::ios::sync_with_stdio(false); 7 std::cin.tie(0); 8 9 long int N, A, B, P, Q, R, S; 10 std::cin >> N >> A >> B; 11 std::cin >> P >> Q >> R >> S; 12 13 14 std::vector<std::string> vec(Q - P + 1, std::string(S - R + 1, '.')); 15 for (int i = 0; i < vec.size(); ++i) { 16 for (int j = 0; j < vec[i].size(); ++j) { 17 int y = i + P; 18 int x = j + R; 19 if (std::max(1 - A, 1 - B) <= (x - B) && x - B <= std::min(N - A, N - B) 20 //&& std::max(1 - A, 1 - B) <= (y - A) && y - A <= std::min(N - A, N - B) && x - B == y - A) { 21 && std::max(1 - A, 1 - B) <= (y - A) && y - A <= std::min(N - A, N - B)) { 22 vec[i][j] = '#'; 23 } 24 if (std::max(1 - A, B - N) <= (B - x) && B - x <= std::min(N - A, B - 1) 25 && std::max(1 - A, B - N) <= (y - A) && y - A <= std::min(N - A, B - 1)) { 26 vec[i][j] = '#'; 27 } 28 29 } 30 } 31 for (auto y : vec) { 32 std::cout << y << std::endl; 33 } 34} 35
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。