公式
A - パスワードの復元 / Password Recovery 解説
by
A - パスワードの復元 / Password Recovery 解説
by
MtSaka
印刷ページ
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
\(P\) の各要素を特定していくことを考えます。
\(P_i\) を特定するにあたって、\(1 \leq j \leq N\) について \(S_{j,i}=-1\) であれば \(P_i\) はどのような値でもよいです。そうでない場合は \(S_{j,i}\neq -1\) となる \(j\) が一つは存在しそれを \(j'\) とすると、\(P_i=S_{j',i}\) である必要がある。あとは実際にこの \(P_i\) の値で他の\(j\) について \(S_{j,i} \neq -1 \implies S_{j,i}=P_i\) となるかを確認すればよいです。
すべての要素 \(P_i\) について条件を満たすときのみ、Yes と答えそれ以外では No と答えれば正解を得られます。
実装例(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> s(n, vector<int>(m));
for (auto& v : s)
for (auto& e : v) cin >> e;
for (int j = 0; j < m; ++j) {
int val = -1;
bool flag = true;
for (int i = 0; i < n; ++i) {
if (s[i][j] == -1) continue;
if (val == -1)
val = s[i][j];
else if (val != s[i][j]) {
flag = false;
break;
}
}
if (!flag) {
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
}
投稿日時:
最終更新:
