UVA 156 Ananagrams STL応用
2186 ワード
https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=92
いくつかの単語を与え、辞書順に並べ替えられていない単語を出力します.(重複する単語を含まないテスト)
単語の並べ替え:各アルファベットの出現回数は同じですが、順序が異なります.つまり、単語のシーケンスの並べ替えです.
並べ替えが等価に変換できる問題を満たすかどうか:単語の構成アルファベットは順序に関係なく,2つの解決構想(標準化)がある.アルファベットカウント:各アルファベットの出現回数を統計し、一致すれば、再配置 を満たすことを示す.統一ソート:いずれも昇順に並べられ、同じシーケンスが得られると、再配置 を満たすことを示す.
したがって、標準化された単語(すべて小文字に変換)の後、異なる考え方で回数を統計し、古い単語へのマッピングを記録することができます.定義 を辞書順に自動的に並べ替える.
各標準化単語を遍歴し,その出現回数が1であればans集合に挿入し,最後に出力すればよい.
いくつかの単語を与え、辞書順に並べ替えられていない単語を出力します.(重複する単語を含まないテスト)
単語の並べ替え:各アルファベットの出現回数は同じですが、順序が異なります.つまり、単語のシーケンスの並べ替えです.
構想分析
並べ替えが等価に変換できる問題を満たすかどうか:単語の構成アルファベットは順序に関係なく,2つの解決構想(標準化)がある.
map
map dict; // ->
したがって、標準化された単語(すべて小文字に変換)の後、異なる考え方で回数を統計し、古い単語へのマッピングを記録することができます.
set ans;
は出力結果を格納し、各標準化単語を遍歴し,その出現回数が1であればans集合に挿入し,最後に出力すればよい.
ACコード(C++11,map標準化,順序無関係)
統合ソート
#include
using namespace std;
map dict; // ->
map trans; // ->
set ans; // ,
string s, st;
int main() {
while (cin >>s && s!= "#") {
st = s;
for (auto& ch : st) //
if (ch >= 'A' && ch <= 'Z') ch = tolower(ch); //
sort(st.begin(), st.end()); // ,
dict[st]++; //
trans[st] = s; //
}
for (auto p : dict) if (p.second == 1) ans.insert(trans[p.first]); // 1
for (auto& p : ans) cout <
アルファベット数
#include
using namespace std;
map