公式
E - 図形のシャッフル/Shuffle the Pattern 解説
by
E - 図形のシャッフル/Shuffle the Pattern 解説
by
MMNMM
まず、次の問題を考えてみましょう。
#
と.
からなる長さ \(N\) の文字列 \(S,T\) が与えられる。 \(T\) を好きに並べ替えることで \(S\) と一致させることができるか判定せよ。
この問題が \(O(N)\) 時間で解ければ、元の問題は対応する行どうしでこの問題を解き、結果がすべて Yes
であるとき、かつそのときに限り Yes
と出力することで解くことができます。
なので、この問題を \(O(N)\) 時間で解くことを考えます。
この問題の答えは、\(S\) に含まれる #
と \(T\) に含まれる #
の個数が等しいとき Yes
で、そうでないとき No
です。
よって、それぞれに含まれる #
の個数を数えることでこの問題が解けました。
実装例は以下のようになります。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main(){
using namespace std;
int H, W;
cin >> H >> W;
vector<string> S(H), T(H);
for(auto&& s : S)cin >> s;
for(auto&& t : T)cin >> t;
for(int i = 0; i < H; ++i){
if(count(S[i].begin(), S[i].end(), '#') != count(T[i].begin(), T[i].end(), '#')){
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
return 0;
}
投稿日時:
最終更新: