首页 > 代码库 > ZOJ3826 Hierarchical Notation(14牡丹江 H) 树套树
ZOJ3826 Hierarchical Notation(14牡丹江 H) 树套树
题意:给你一个嵌套字典,询问字典的键值 ,输出字典的值。
解题思路:我的想法是字典树套字典树,因为指针的大小为8 字节 所以动态字典树会超内存,开始以为不能静态,后来发现静态实现也挺简单。所以又改成静态。
写到220行,还要特别讨论{"a":{}} 这种特判。
解题代码:
1 // File Name: h.cpp 2 // Author: darkdream 3 // Created Time: 2014年10月18日 星期六 11时35分02秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 //#define debug 26 #ifdef debug 27 28 #endif 29 using namespace std; 30 char str[6000005]; 31 char str1[6000005]; 32 int len; 33 int sp; 34 int change(char c) 35 { 36 if(c >= ‘a‘ && c <= ‘z‘) 37 return c- ‘a‘; 38 if(c >= ‘A‘ && c <= ‘Z‘) 39 return c - ‘A‘ + 26; 40 if(c >= ‘0‘ && c <= ‘9‘) 41 return c - ‘0‘ + 52; 42 } 43 struct node{ 44 int ne[63]; 45 int sub; 46 int iss; 47 int isend; 48 int be; 49 int en; 50 }N[220000]; 51 int LN,LT; 52 struct Trie{ 53 int newnode() 54 { 55 LN ++; 56 memset(N[LN].ne,-1,sizeof(N[LN].ne)); 57 N[LN].sub = -1; 58 N[LN].isend = 0 ; 59 N[LN].iss = 0 ; 60 N[LN].be = 0 ; 61 N[LN].en = 0 ; 62 return LN; 63 } 64 int root ; 65 void init() 66 { 67 root = newnode(); 68 } 69 int newTrie(Trie T[]) 70 { 71 LT ++; 72 T[LT].init(); 73 return LT; 74 } 75 void insert(Trie T[]) 76 { 77 //struct node *now = root; 78 int be = sp; 79 #ifdef debug 80 printf("%c%c%c\n",str[sp-1],str[sp],str[sp+1]); 81 #endif 82 while(be < len) 83 { 84 //printf("*******"); 85 if(str[be+1] == ‘}‘) 86 { 87 sp = be + 1; 88 return; 89 } 90 int i ; 91 92 be = be + 3; 93 94 if(str[be-1] == ‘}‘) 95 { 96 sp = be-1; 97 return; 98 } 99 if(be + 2 >= len)100 {101 return;102 }103 int now = root;104 for(i = be ;str[i] !=‘"‘;i ++)105 {106 #ifdef debug107 printf("%c",str[i]);108 #endif109 int tt = change(str[i]);110 111 if(N[now].ne[tt] == -1)112 {113 N[now].ne[tt]= newnode();114 }115 now = N[now].ne[tt];116 }117 N[now].isend = 1;118 //printf("%c\n",str[i+2]);119 if(str[i+2] == ‘"‘)120 {121 N[now].be = i + 2;122 N[now].iss = 1; 123 int j = i + 3; 124 while(str[j] != ‘"‘)125 {126 j++ ; 127 }128 N[now].en = j;129 be = j; 130 }else{131 sp = i + 1;132 N[now].be = i + 2;133 N[now].sub = newTrie(T);134 T[N[now].sub].insert(T);135 be = sp;136 N[now].en = be;137 }138 #ifdef debug139 printf("\n%d %d\n",N[now].be,N[now].en);140 /* for(int i = now->be ;i <= now->en;i ++)141 printf("%c",str[i]);142 printf("\n");*/143 #endif144 }145 sp = be;146 }147 148 149 void query(Trie T[])150 {151 // debug(root);152 int now = root;153 int i ;154 #ifdef debug155 printf("%d %c\n",sp,str1[sp]);156 #endif157 for(i = sp;str1[i] != ‘"‘ ;i ++)158 {159 #ifdef debug160 printf("%c",str1[i]);161 #endif162 int tt = change(str1[i]);163 if(N[now].ne[tt] != -1)164 {165 now =N[now].ne[tt]; 166 }else {167 //printf("%d\n",i);168 printf("Error!\n");169 return;170 }171 } 172 #ifdef debug173 printf("\n**********8\n");174 #endif175 sp = i + 3; 176 if(N[now].isend == 0)177 { 178 printf("Error!\n");179 return;180 }181 if(sp >= len)182 {183 //printf("%d %d\n",now->be,now->en);184 for(int i = N[now].be ;i <= N[now].en;i ++)185 printf("%c",str[i]);186 printf("\n");187 }else{188 if(N[now].sub == -1)189 {190 printf("Error!\n");191 return;192 }193 T[N[now].sub].query(T);194 }195 }196 }T[11005];197 //struct Trie T[11005];198 int main(){199 //freopen("test.in","r",stdin);200 int t; 201 scanf("%d",&t);202 int kt = 0 ; 203 while(t--)204 {205 memset(T,0,sizeof(T));206 memset(N,0,sizeof(N));207 scanf("%s",str);208 len = strlen(str);209 sp = -1;210 LN = 0;211 LT = 0;212 T[0].init();213 T[0].insert(T);214 int q; 215 scanf("%d",&q);216 for(int i = 1;i <= q;i ++)217 {218 scanf("%s",str1);219 sp = 1; 220 len = strlen(str1);221 T[0].query(T);222 }223 }224 return 0;225 }
ZOJ3826 Hierarchical Notation(14牡丹江 H) 树套树
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。