羅区P1808 _NOI単語分類ガイド2011増加(01)
タイトル説明
オリバーは、背中の痛み、英語の単語を学ぶことにしましたが、すぐに彼は混乱した単語が直接、彼は言葉を分類することを決定し、覚えておくことは非常に困難である見つけました。
二つの単語は、クラスに分けることができるかどうか、および各2つの文字からなる単語の数が同じである場合のみ。
たとえば、「AABAC」、そしてそれを「CBAAAは」クラスに分類することができ、一方では「AAABBは」クラスではありません。
大文字ですべての単語は、各単語の長さは100を超えていないオリバーは今、Nワードがあります。オリバーは、これらの言葉は、いくつかのカテゴリに分類され、あなたを指示します。
入力形式
ワードNの入力ファイル数、各行動のN本のワード線の最初の行。
出力フォーマット
出力ファイルは、カテゴリにNワードの数を表す数だけを、含まれています
サンプル入力と出力
3 AABAC CBAAA AAABB
2
説明/ヒント
データの70%をN≤100を満たします。データの100%にN≤10000を満たします。
溶液
アルゴリズム(1)
各ソート文字列自体の内部
そして、ソートすべての文字列
初期ANS = 1;のうちの少なくとも一種が存在することになるので
すべての文字列を列挙し、strの場合は[i]が!=筋力[I + 1]、ANS ++。
最後に、出力ANS
操作の最大数:
100 *ログ(100)* 10000 + 10000 *ログ(10000)+10000
約O(nlog(n))がに等しく、右?
Code(100分)
事実、これはに住むことができることを証明しています
それは背後に、より複雑なアルゴリズムを必要としません。
。1つの#include <iostreamの> // 雲台を使用していない、仕事のOIを取得する必要はありません 2の#include <アルゴリズム> // 迅速ドレインソート() 3。の#include <CStringの> 4。 使用して 名前空間STD; 。5 BOOLの cmpchar(文字 TA、CHAR TB){ 6。 復帰 TA < TB; 7 } 。8 BOOLの cmpstr(文字 TA、列TB){ 9。 復帰 TA < TB; 10 } 11 文字単語[ 10001 ]; 12れます int型のn; 13 のint main()の 14 { 15 CIN >> N。 16 INT ANS = 1 。 17 のために(int型 I = 0 ; iがn <I ++は{) 18 CIN >> ワード[i]は、 19 ソート(&ワード[I] [ 0 ]、&ワード[I] [単語[I] .size()]、cmpchar)。 20 } 21 ソート(&ワード[ 0 ]、&ワード[n]は、cmpstr)。 22 のために(int型 I = 0 ; iがN- < 1 ; iが++ ) 23 であれば(!ワード[I] =ワード[I + 1 ]) 24の ANS ++ 。 25 COUT << ANS。 26 リターン 0 ; 27 }
分類間隔を見つけ、クラス間隔の数= 1:アイデアはこれです
アルゴリズム(2)
借入STL <マップ>
マップは、それはカスタム配列として扱うことができ、
マップ<文字列、ブール>単語
これは、新しい配列を作成することです
呼ばれる単語
次の表は、文字列型であります
bool値は型であります
そして、それは、アレイへの直接アクセスと同じくらい普通のことができます
ワード[STR] == 1。
Code(100分)
。1つの#include <iostreamのは> // 雲台を使用していない、仕事のOIを取得する必要はありません 2の#include <アルゴリズム> // 迅速ドレインソート() 。3の#include <CStringの> 。4の#include <cstdioを> 。5の#include <地図> 。6 使用して 名前空間STD; 7地図< 文字列、BOOL > 単語; 8 int型N-、ANS; 9 ストリングT; 10 intは(メイン) 11 { 12は scanfの(" %のD "、およびN-); 13である ため(int型 i = 0 ; iがN <; Iは++ ) 14 { 15 CIN >> T。 16 ソート(t.begin()、t.end())。 17 であれば(!ワード[T]) 18 { 19の ANS ++ 。 20 ワード[T] = 1 。 21 } 22 } 23 COUT << ANS。 24 リターン 0 ; 25 }
ハッハッハ、ソートよと、このようにとどまることができます!
str.begin()str.end()はアドレスをエンドツーエンドSTR戻ります
この比率
ソート(&ワード[I] [0]、&ワード[I] [単語[I] .size()]、cmpchar)。
使用する方が簡単で、右?
STL大法が良いです!