質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

740閲覧

AtCoder Beginner Contest 230のC問題がわからない

mmmisaki

総合スコア34

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/21 19:00

以下の問題を解いているのですがわからない箇所があります
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

A+k=x
B+k=y
の時、
k=x-A=y-B
が成り立ちます。逆も成り立ちます。

これが成り立っているかを調べているのがその条件です。

投稿2021/12/21 21:32

yudedako67

総合スコア2047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問