思路就是用栈模拟,不用开实体的栈,直接记一个top指针就行。
说说这题的细节:
1.tag标签里的内容不要动,原样输出。比如<p aa bb cc>,就这样输出就行,不要删空格。题目中说了you shouldn’t change anything of any tag.
2.标签之外的文本,文本内的空白符(空格,tab,回车),相邻单词之间用一个空格分隔开。文本与标签相邻的地方,不要有多余的空白符,就是说,文本与标签相邻的地方,除了一个回车以及缩进用的空白符之外,不要有任何空白符。
3.上一个case的</html>跟下一个case的<html>有可能在同一行,并且第一个<html>之前有可能有空白符
4.每行结尾不要有多余的空格
5.不要有空行
以下给出几组数据,空格用<SPACE>表示,tab键用<TAB>表示:
Input:
5 <TAB><html> <body> <h1>ACM ICPC</h1> <p>Hello<br/>World</p> </body></html> <html> <body><p><TAB> Asia Chengdu Regional </p><TAB> <p class="icpc"> ACM-ICPC</p></body></html> <html> <TAB> <TAB> </html><TAB><html> <p> <TAB> aa bb cc dafdadgsdfsa<TAB> afd </p> <TAB> </html><TAB><TAB> <html><body aslfja fdsafs<TAB>fdsafsa ><bb/></body></html>
Output
Case #1: <html> <body> <h1> ACM ICPC </h1> <p> Hello <br/> World </p> </body> </html> Case #2: <html> <body> <p> Asia Chengdu Regional </p> <p class="icpc"> ACM-ICPC </p> </body> </html> Case #3: <html> </html> Case #4: <html> <p> aa bb cc dafdadgsdfsa afd </p> </html> Case #5: <html> <body aslfja fdsafs fdsafsa > <bb/> </body> </html>
代码
#include <cstdio> #include <cstring> #include <cstdlib> #define IN 0 #define OUT 1 #define START 0 #define END 1 using namespace std; const int MAXN = 210000; char str[MAXN]; char tmp[MAXN]; char tag[MAXN]; bool CheckEnd( char *s, int len ) { if ( s[len-6] == '<' && s[len-5] == '/' && s[len-4] == 'h' && s[len-3] == 't' && s[len-2] == 'm' && s[len-1] == 'l' && s[len] == '>' ) return true; return false; } int chuli( char *s, int len ) { int i = 0, j = 0; while ( i < len && (s[i] == ' ' || s[i] == 9 || s[i] == ' ') ) ++i; while ( i < len ) { s[j] = s[i]; if ( s[i] == '>' ) { ++i; while ( s[i] == ' ' || s[i] == 9 || s[i] == ' ' ) ++i; } else ++i; ++j; } s[j] = '