【hpu1414】Kick Ass

你玩過一個叫做”Kick Ass - Destroy the web”的遊戲嗎?如果你想玩的話請點擊此處

當然,你沒有玩過也沒關係,這個遊戲是通過js來加載一個飛船,讓你可以通過控制它發射子彈來摧毀網頁上的元素,從而獲得分數。

我們知道HTML是超文本標記語言,簡單地說就是通過一些標籤來指明元素的展示方式,比如

就可用作表明這是一個段落,
表明這是一個區塊。

假設有一個網頁只含有

兩種標記,其中

中只含有數字,摧毀

標記可獲得其中各個數字之和的分數,摧毀
可獲得其中包含的所有

分數與包含的
分數二倍之和的分數。

現在給你一個網頁,你能否計算出完全摧毀它可得到的分數。

爲了簡化難度,你可以假設:

所給網頁的字符只有數字和標籤
所給網頁的標籤都正確匹配
保證所給網頁中的數字都在

標籤內

標籤內不會含有標籤
標籤內可能含有

標籤和
標籤 輸入 多組測試數據,請處理到文件結束。 每組佔一行,有一個長度不大於1000的字符串代表所給網頁。 輸出 請輸出完全摧毀此網頁可獲得的分數。 樣例輸入

123

123

樣例輸出
18

心理小活動
/*
強調內容字符串中一開始進行遞歸時不是div就是p,若是p就直接算中間的數的和然後返回,
只有是div時纔會進入if()爲真的循環,而且若div是第一次出現那麼不會出現裏面的值乘二
起初這道題沒理解題意,以爲只要有數在div和/div之間就成二,
原來是摧毀 < div > < /div > 可獲得其中包含的所有 < p >< /p>分數與包含的< div>< /div>分數二倍之和的分數。
所以只有是div出現第二次及以上的時候纔會出現數的和乘二

   */

AC代碼:

#include<cstdio>
#include<cstring> 
#include<algorithm>
using namespace std;
char str[1010];
int dfs(int m,int &t,bool flag)
{
    if(flag)
    {
        int sum=0;
        while(true)
        {
            if(str[m]=='<'&&str[m+1]=='p'&&str[m+2]=='>')
            sum+=dfs(m+3,m,false);
            else if(str[m]=='<'&&str[m+1]=='d'&&str[m+2]=='i')
            sum+=2*dfs(m+5,m,true);
            else if(str[m]=='<'&&str[m+1]=='/'&&str[m+2]=='d')
            {
                t=m+6;
                return sum;
            }
        }
    }
    else 
    {
        int sum=0;
        while(true)
        {
            if(str[m]>='0'&&str[m]<='9')
            {
                sum+=str[m]-'0';
            }
            else 
            {
                t=m+4;
                return sum;
            }
            m++;
        }
    }
}
int main()
{
   while(~scanf("%s",str))
   {
       int l=strlen(str);
       int res=0,i=0;
       /*
          字符串中一開始進行遞歸時不是div就是p,若是p就直接算中間的數的和然後返回,
          只有是div時纔會進入if()爲真的循環,而且若div是第一次出現那麼不會出現裏面的值乘二
          起初這道題沒理解題意,以爲只要有數在div和/div之間就成二,
          原來是摧毀<div></div>可獲得其中包含的所有<p></p>分數與包含的<div></div>分數二倍之和的分數。
          所以只有是div出現第二次及以上的時候纔會出現數的和乘二 

       */
       while(i<l)
       {
          if(str[i]=='<'&&str[i+1]=='p'&&str[i+2]=='>')
           res+=dfs(i+3,i,false);
           else res+=dfs(i+5,i,true);
        }
        printf("%d\n",res);
   }


return 0; 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章