B. bHTML Tables Analisys

本文提供了一种解决 CodeForces 51B 问题的有效方法,使用了类似于括号匹配的栈来处理表格结构。通过定义特定的ID来区分不同的表格元素,并运用栈来跟踪当前的表格层级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://codeforces.com/problemset/problem/51/B

利用stack类似与括号匹配,每个 <table>ROWS</table> 划分一个模块,

一个 <td>TABLE</td>记录多少个CELL, stack中存的是模块的序号。

View Code
const int MM = 511111;
const double esp=1e-8;
const double lep=0.0000001;
#define maxint 0x3f3f3f3f
typedef __int64 int64;
#define  debug puts("wrong")
#define clr(a) memset(a,0,sizeof(a))

char str[111][5555];
int N;
int num[55555],cnt;
int st[55555], top;
string ch;
int get_id(char s,int op,int &i) {
    if(s=='a') {i+=4;return op*1;}
    else if(s=='d') {i+=1;return op*2;}
    else {i+=1;return op*3;}
}
void get_data() {
    int i,j,k,len;
    N=0;
    while(scanf("%s",str[N])!=EOF) {
        if(str[N][0]=='#') break;
        N++;
    }
    ch="";
    for(i=0;i<N;i++) {
        for(j=0;str[i][j];j++) ch+=str[i][j];
    }
    //    cout<<ch<<endl;
    for(i=cnt=0;i<ch.length();i++) {
        if(ch[i]=='<') {
            if(ch[i+1]=='t') {
                i+=2;
                num[cnt++]=get_id(ch[i],1,i);
            }
            else {
                i+=3;
                num[cnt++]=get_id(ch[i],-1,i);
            }
        }
    }
}
//ta->1 tr->3 td->2
void solve() {
    int i,j,k,ans[55555],mm=0,tmp=0,now=0;
    top=0;
    memset(ans,0,sizeof(ans));
    for(i=0;i<cnt;i++) {
        if(num[i]>0) {
            if(num[i]==1) st[top++]=now++;
            else if(num[i]==2) ans[st[top-1]]++;
        }
        else if(num[i]==-1) top--;
    }
    sort(ans,ans+now);
    for(i=0;i<now;i++) printf("%d ",ans[i]); printf("\n");
}
int main() {
    get_data(),solve();
    return 0;
}

 

转载于:https://www.cnblogs.com/zhang1107/archive/2013/04/18/3027991.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值