西瓜的編譯原理作業

2021-07-29 20:48:44 字數 1422 閱讀 7192

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

a

anasp

asasc

ascii

basbasic

sample output

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 歸約 ...