題目:
請編寫程式,對一段英文文字,統計其中所有不同單詞的個數,以及詞頻最大的前10%的單詞。
所謂「單詞」,是指由不超過80個單詞字元組成的連續字串,但長度超過15的單詞將只擷取保留前15個單詞字元。而合法的「單詞字元」為大小寫字母、數字和下劃線,其它字元均認為是單詞分隔符。
輸入格式:
輸入給出一段非空文字,最後以符號#結尾。輸入保證存在至少10個不同的單詞。
輸出格式:
在第一行中輸出文字中所有不同單詞的個數。注意「單詞」不區分英文大小寫,例如「pat」和「pat」被認為是同乙個單詞。
隨後按照詞頻遞減的順序,按照詞頻:單詞的格式輸出詞頻最大的前10%的單詞。若有並列,則按遞增字典序輸出。
輸入樣例:
this is a test.輸出樣例:(注意:雖然單詞the也出現了4次,但因為我們只要輸出前10%(即23個單詞中的前2個)單詞,而按照字母序,the排第3位,所以不輸出。)the word 「this」 is the word with the highest frequency.
longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee. but this_8 is different than this, and this, and this…#
this line should be ignored.
23思路:5:this
4:is
簡單模擬。map儲存字串出現次數,用struct來存並且排序,先全部大寫換小寫利於儲存排序,然後遇到有效字元即讀取存入a,否則將a存入map中並清空a,繼續操作直到讀到最後。ac**:需要注意的是會讀入空格,所以需要進行判斷是否當前位置前沒有讀入過空格。
map存字串的時候是通過是否為第一次出現來給struct編序號的,然後map的值轉化為相應序號進行struct的操作。
(聽說字典樹才是正解,但是對於我這種樹痴來說,模擬,yyds!)
#include
using
namespace std;
#define inf 0x3f3f3f
string a;
mapint>p;
struct node
h[101000];
bool
cmp(node a,node b)
intmain()
int l=s.
size()
;for
(int i=
0; i)int k=0;
int f=0;
for(
int i=
0; i)else
else
a.clear()
;}}}
sort
(h+1
,h+k+
1,cmp)
; cout
int i=
1; i<=k/
10; i++
)return0;
}
PTA 7 14 電話聊天狂人
這個題是乙個 map 應用的題目,但是由於測試點的特殊性,還是有需要注意的點。這道題的額外收穫是學習到了如何根據 map 的value 排序。給定大量手機使用者聯絡歷史,找出其中通話次數最多的聊天狂人。輸入格式 輸入首先給出正整數n 105 為聯絡歷史條數。隨後n行,每行給出一條聯絡歷史。簡單起見,...
PTA 7 14 求整數段和 15分
給定兩個整數a和b,輸出從a到b的所有整數以及這些數的和。輸入格式 輸入在一行中給出2個整數a和b,其中 100 a b 100,其間以空格分隔。輸出格式 首先順序輸出從a到b的所有整數,每5個數字佔一行,每個數字佔5個字元寬度,向右對齊。最後在一行中按sum x的格式輸出全部數字的和x。輸入樣例 ...
PTA 7 14 求整數段和
7 14 求整數段和 15分 給定兩個整數a和b,輸出從a到b的所有整數以及這些數的和。輸入格式 輸入在一行中給出2個整數a和b,其中 100 a b 100,其間以空格分隔。輸出格式 首先順序輸出從a到b的所有整數,每5個數字佔一行,每個數字佔5個字元寬度,向右對齊。最後在一行中按sum x的格式...