hdu 4782 | 2013 Asia Chengdu Regional Contest B (模拟)

http://acm.hdu.edu.cn/showproblem.php?pid=4782

题意:

将格式混乱的html代码输出成标准格式。

思路:

模拟。

说下细节:

  * 遇到open tag,先打印,后dep++
  * 遇到close tag,先dep--,再打印
  * 遇到空标签,直接在当前深度打印
  * 遇到空白字符时,只有当前面出现了text以及后面也出现了text的时候才打印。**也就是说第一个string和最后一个string都是紧邻标签的。**

最坑的一点是...虽然题目给了数据组数,但是在所在行的同一行,可能出现下一组的开始

最坑的一点是...虽然题目给了数据组数,但是在所在行的同一行,可能出现下一组的开始

最坑的一点是...虽然题目给了数据组数,但是在所在行的同一行,可能出现下一组的开始

说好的多组数据呢...

 1#include <bits/stdc++.h>
 2using namespace std;
 3typedef long long LL;
 4const int N = 1E5+10;
 5const double eps = 1e-8;
 6#define ms(a,x) memset(a,x,sizeof(a))
 7#define lowbit(x) (x&(-x))
 8char buff[N];
 9int len = 0;
10char ch;
11void skip()
12{
13    while (ch=='\n'||ch==' '||ch=='\t') ch =getchar();
14}
15void TAG()
16{
17    len = 0;
18    ch =getchar();
19    while (ch!='>')
20    {
21    buff[len++] = ch;
22    ch = getchar();
23    }
24    buff[len] = 0;
25}
26void STR()
27{
28    len = 0 ;
29    while (ch!=' '&&ch!='\t'&&ch!='\n'&&ch!='<')
30    {
31    buff[len++] = ch;
32    ch = getchar();
33    }
34    buff[len] = 0;
35}
 1void pr( int len)
 2{
 3    for ( int i = 0 ; i < len ; i++) putchar(' ');
 4}
 5void solve()
 6{
 7    ch = ' ';
 8    int dep = 0;
 9    for ( ; ;)
10    {
11    skip();
12    if (ch=='<')
13    {
14        TAG();
15        if (buff[0]=='/')
16        {
17        dep--;
18        pr(dep);
19        }
20        else if (buff[len-1]=='/')
21        {
22        pr(dep);
23        }
24        else 
25        {
26        pr(dep);
27        dep++;
28        }
29        printf("<%s>\n",buff);
30        if (strcmp(buff,"/html")==0) break;
31        ch = getchar();
32    }
33    else
34    {
35        STR();
36        pr(dep);
37        printf("%s",buff);
38        //可能有多个字符串
39        skip();
40    //    cout<<"buff:"<<buff<<endl;
41        while (ch!='<')
42        {
43    //  cout<<"ch:"<<ch<<endl;
44        STR();
45        printf(" %s",buff);
46        skip();
47        }
48        puts("");
49        //printf("\n");
50    }
1    }
2}
3int main(){
4        freopen("./in.txt","r",stdin);
5//      freopen("output","w",stdout);
6    int cas = 0 ;
7    int T;
8    cin>>T;
1   // cout<<"T:"<<T<<endl;
2    while (T--)
3    {
4    printf("Case #%d:\n",++cas);
5    solve();
6    }
7    return 0;
8}