time limit: 1000 ms memory limit: 64 mb
total submission: 25 submission accepted: 11
judge by case
description
西瓜在寫編譯原理作業中的文法分析器的時候,通常需要檢測乙個單詞是否在給定的單詞列表裡。為了提高查詢和定位的速度,通常都要畫出與單詞列表所對應的單詞查詢樹,其特點如下:
根節點不包含字母,除根節點外每乙個節點都僅包含乙個大寫英文本母;
從根節點到某一節點,路徑上經過的字母依次連起來所構成的字母序列,稱為該節點對應的單詞。單詞列表中的每個詞,都是該單詞查詢樹某個節點所對應的單詞;
在滿足上述條件下,該單詞查詢樹的節點數最少。
例:圖一的單詞列表對應圖二的單詞查詢樹
對乙個確定的單詞列表,請統計對應的單詞查詢樹的節點數(包括根節點)
input
輸入乙個單詞列表,每一行僅包含乙個單詞和乙個換行/回車符。每個單詞僅由大寫的英文本元組成,長度不超過63個字元,單詞個數不超過5000。
output
輸出僅包含乙個整數和乙個換行/回車符。該整數為單詞列表對應的單詞查詢樹的節點數。
sample input
original
transformed
asample outputanasp
asasc
ascii
basbasic
original
transformed
13
這題考的是字典樹,然而我並不熟悉字典樹,所以只能按照皓神的思路來寫了
#include#include#include#include#include#include#include#include#include#include#include//#define debug
using namespace std;
const int maxn = 5005;
string s[maxn];
int main(){
cin.tie(0);
cin.sync_with_stdio(false);
#ifdef debug
int start = clock();
freopen("text.txt","r",stdin);
#endif
int sum=0;
while(cin>>s[sum])
sum++;
sort(s,s+sum);
int i,j;
int ans=s[0].size();
for(i=1;i
編譯原理作業 RE NFA DFA minDFA
題目將乙個正規表示式 regular expression 轉換成nfa,之後從nfa轉換成dfa,之後在這個dfa中找出mindfa。一 re到nfa re regular expression 為 a b aba a b 將re化成nfa的三個主要的類別是 a b 和a 和ab 二 nfa到df...
編譯原理作業五
5.3.1 下面是涉及運算子 和整數或浮點運算分量的表示式的文法。區分浮點數的方法是看它有無小數點。e e t t t num.num num 1 給出乙個 sdd 來確定每個項 t 和表示式 e 的型別 sdd 產生式語義規則 1 e e1 t if e1.type t.type then e.t...
編譯原理 作業十四
算符優先分析 1.接上個作業 p121練習1 完成4 5 兩個步驟。1 計算firstvt和 lastvt。2 找三種關係對。3 構造算符優先關係表。4 是否算符優先文法?答 是。5 給出輸入串 a,a,a 的算符優先分析過程。棧關係 輸入串動作 a,a,a 移進a,a,a 移進 a a,a 歸約 ...