HDU1251統計難題(字串處理)
Description
Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首).Input
輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的單詞,一個空行代表單詞表的結束.第二部分是一連串的提問,每行一個提問,每個提問都是一個字串.注意:本題只有一組測試資料,處理到檔案結束.
Output
對於每個提問,給出以該字串為字首的單詞的數量.Sample Input
banana band bee absolute acm ba b band abcSample Output
題意很清晰,就是統計有此字首的單詞數量,關鍵是如何儲存是最後尋找時的時間縮短,不會時間超限,增加效率
因為單詞都是由小寫字母組成的,所以首字元至多有26種情況,所以把首字元一樣的放在一個二維陣列中,節省了大量時間
還是就是比較的時候,注意倆個函式的區別:
1、這兩個函式的差別其實還是挺大的,差別在這裡:
對於memcmp(),如果兩個字串相同而且count大於字串長度的話,memcmp不會在\0處停下來,會繼續比較\0後面的記憶體單元,直到_res不為零或者達到count次數。
對於strncmp(),由於((__res = *cs - *ct++) != 0 || !*cs++)的存在,比較必定會在最短的字串的末尾停下來,即使count還未為零。具體的例子:
char a1[]="ABCD";
char a2[]="ABCD";
對於memcmp(a1,a2,10),memcmp在兩個字串的\0之後繼續比較
對於strncmp(a1,a2,10),strncmp在兩個字串的末尾停下,不再繼續比較。
所以,如果想使用memcmp比較字串,要保證count不能超過最短字串的長度,否則結果有可能是錯誤的。
#include<stdio.h> #include<string.h> char a[28][11111][11],b[11]; int main() { int i=0,n,m,j,num[28]; memset(num,0,sizeof(num));//按照小寫字母排序,方便整理資料 while(gets(b)&&strcmp(b,"")!=0)//輸入單詞表 { j=b[0]-96; strcpy(a[j][num[j]++],b);//存入以j開頭的單詞序列中 } int c; while(gets(b))//輸入字首 { c=0; j=b[0]-96; int l=strlen(b); for(int k=0; k<=num[j]; k++)//num[j]為最大的小寫字母 if(memcmp(a[j][k],b,l)==0)//本函式就是比較前l個位元組大小 c++; printf("%d\n",c); } return 0; }
相關推薦
HDU1251統計難題(字串處理)
Description Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首)
HDU1251 統計難題(字典樹)
lag != tac NPU math def tput struct bee HDU1251 統計難題 Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴)
HDU1251 統計難題(map水題)
統計難題 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 56034 Accepted Submissi
zcmu--1750: 統計單詞數(字串處理)
1750: 統計單詞數 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 361 Solved: 66 [Submit][Status][Web Board] Description 一般的文字編輯器都有查詢單詞的功能,
[ACM] hdu 1251 統計難題 (字典樹)
第一次 stdio.h scrip null 明顯 output 代碼 ane 處理 統計難題 Problem Description Ignatius近期遇到一個難題,老師交給他非常多單詞(僅僅有小寫字母組成,不會有反復的單詞出現),如今老師要他統計出以某
E - String of CCPC (字串處理)(str.substr()的運用)
滴答滴答---題目連結 BaoBao has just found a string of length consisting of 'C' and 'P' in his pocket. As a big fan of the China
HDU 1251 - 統計難題 (字典樹)
Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重複的單詞出現),現在老師要他統計出以某個字串為字首的單詞數量(單詞本身也是自己的字首). Input 輸入資料的第一部分是一張單詞表,每行一個單詞,單詞的長度不超過10,它們代表的是老師交給Ignatius統計的
ZOJ-3985 String of CCPC(字串處理)
傳送門: 題意: 給你一個字串,其中只有'C',‘P’兩種字元。現在你可以從商店中購買‘C’,'P'兩種字元,但需要支付費用,第一次購買需要支付0,第二次支付1,第n次支付n-1。現在你可以通過組成CCPC字元來賺取1,每組成一個CCPC字元賺1。其中CCPCCPC這
UVa:1610 Party Games(字串處理)
題意: 給出n個串(n為偶數); 要構造一個串,使n串中有一半小於等於它,另外一半大於它; 要求這個串長度儘量小,同時字典序小 思路1:得益於string自帶字典序比較,所以先對整個字串組排序,那麼中間兩個a,b,答案就要滿足大於等於a,小於b,因為有些細節問題的存在,所以直接暴力列舉就行了
1069 The Black Hole of Numbers(字串處理)
1069 The Black Hole of Numbers (20 分) For any 4-digit integer except the ones with all the digits being the same, if we sort the di
學校OJ——26進位制(字串處理)
問題 B: 26進位制數 時間限制: 1 Sec 記憶體限制: 32 MB 提交: 831 解決: 249 [提交][狀態][討論版] 題目描述 現在我們用A表示26,用B表示25,依次類推,到用Z表示1,即A=26, …X = 3, Y = 2, Z=1,用這種方式構建一個26進位制的計數
codeforces Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies(字串處理)字首字尾處理
題目: 傳送門 題意: 給出由S和G字元組成的序列,允許最多交換一次兩個字元的操作,求最長的連續的G序列的長度。 思路: 求出每個序列的字首連續G序列的長度和字尾連續G序列的長度。並且求出每個序列的字首G的個數和字尾前序G的個數。 然後對序列進行挨個遍歷。求出sum=每個序列的前
字元識別(字串處理)
描述: 中南林業科技大學計算機與資訊工程學院某位老師開發一個字元識別程式. 這個程式用來將紙質文件轉換為電子版. 很顯然, 這個轉換過程不能保證100%正確, 其中有些字元不能識別. 你的任務是寫一個
hdu 1236 排名 (字串處理)水題
排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi
HDU 1251 統計難題(字典樹)
#include<stdio.h> #include<string.h> struct Node { Node *next[26];//每個節點的分支由單詞性質決定,這裡是小寫的26個字母 int cnt;//每個節點可以儲存一些資訊,這道題是儲存該字首的數量 Node()
ACM-子串(字串處理)
問題描述 有一些由英文字元組成的大小寫敏感的字串。請寫一個程式,找到一個最長的字串 x,使得:對於已經給出的字串中的任意一個 y, x 或者是 y 的子串、或者 x 中的字元反序之後
加密解密(字串處理)
標題:加密解密 Playfair密碼由英國人發明,它使用方便而且可以讓頻度分析法失效,直到一戰中才被破譯。 其一變種方法如下:首先選擇一個金鑰單詞(稱為pair)(剔除重複字母,且都為小寫字母),然後與字母表中其他字母一起填入至一個5x5的方陣中,填入方法如
國王的魔鏡(南陽oj264)(字串處理)
國王的魔鏡 時間限制:3000 ms | 記憶體限制:65535 KB 難度:1 描述國王有一個魔鏡,可以把任何接觸鏡面的東西變成原來的兩倍——只是,因為是鏡子嘛,增加的那部分是反的。 比如一條項鍊,我們用AB來表示,不同的字母表示不同顏色的珍珠。如果把B端
NYOJ 1272 表示式求值 (字串處理)
表示式求值 時間限制:1000 ms | 記憶體限制:65535 KB 難度:3 描述假設表示式定義為: 1. 一個十進位制的正整數 X 是一個表示式。 2. 如果 X 和 Y 是 表示式,則 X+Y, X*Y 也是表示式; *優先順序高於+. 3. 如果 X
(trie)HDU1251 統計難題
文件 esp 出現 ble nan ont oid 結束 abc Ignatius最近遇到一個難題,老師交給他很多單詞(只有小寫字母組成,不會有重復的單詞出現),現在老師要他統計出以某個字符串為前綴的單詞數量(單詞本身也是自己的前綴). Input輸入數據的第一部分是一張