Destroy the web

来源:互联网 发布:查看他人通话记录软件 编辑:程序博客网 时间:2024/06/07 00:12

题目描述

你玩过一个叫做"Kick Ass - Destroy the web"的游戏吗?如果你想玩的话

当然,你没有玩过也没关系,这个游戏是通过js来加载一个飞船,让你可以通过控制它发射子弹来摧毁网页上的元素,从而获得分数。

我们知道HTML是超文本标记语言,简单地说就是通过一些标签来指明元素的展示方式,比如<p></p>就可用作表明这是一个段落,<div></div>表明这是一个区块。

假设有一个网页只含有<p></p><div></div>两种标记,其中<p><p>中只含有数字,摧毁<p></p>标记可获得其中各个数字之和的分数,摧毁<div></div>可获得其中包含的所有<p></p>分数与包含的<div></div>分数二倍之和的分数。

现在给你一个网页,你能否计算出完全摧毁它可得到的分数。

为了简化难度,你可以假设:

  • 所给网页的字符只有数字和标签
  • 所给网页的标签都正确匹配
  • 保证所给网页中的数字都在<p></p>标签内
  • <p></p>标签内不会含有标签
  • <div></div>标签内可能含有<p></p>标签和<div></div>标签

输入

多组测试数据,请处理到文件结束。

每组占一行,有一个长度不大于1000的字符串代表所给网页。

输出

请输出完全摧毁此网页可获得的分数。

样例输入

<div><p>123</p><div><p>123</p></div></div>

样例输出

18
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;char s[1020];int dfs(int m,int &t,bool flag) {    if(flag) {        int sum=0;        while(true) {            if(s[m]=='<'&&s[m+1]=='p'&&s[m+2]=='>') {                sum+=dfs(m+3,m,false);            } else if(s[m]=='<'&&s[m+1]=='d'&&s[m+2]=='i') {                sum+=2*dfs(m+5,m,true);            } else if(s[m]=='<'&&s[m+1]=='/'&&s[m+2]=='d') {                t=m+6;                return sum;            }        }    } else {        int sum=0;        while(true) {            if(s[m]<='9'&&s[m]>='0')                sum+=s[m]-'0';            else {                t=m+4;                return sum;            }            m++;        }    }}int main() {    while(scanf("%s",s)!=EOF) {        int l=strlen(s);        int res=0,i=0;        while(i<l) {            if(s[i]=='<'&&s[i+1]=='p'&&s[i+2]=='>') {                res+=dfs(i+3,i,false);            } else {                res+=dfs(i+5,i,true);            }        }        printf("%d\n",res);    }    return 0;}


原创粉丝点击