日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Aizu - 1407 Parentheses Editor(对顶栈+模拟)

發布時間:2024/4/11 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Aizu - 1407 Parentheses Editor(对顶栈+模拟) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊查看

題目大意:給出一個字符串,只由 ' ( ' , ' ) ' 和 ' - ' 組成,初始時給出一個空串 s,三種字符所代表的操作如下:

  • ' ( ' :在 s 后添加一個左括號
  • ' ) ' :在 s 后添加一個右括號
  • ' - ' :刪除掉 s 最后的那個括號
  • 每次操作后問有多少個合法的括號序列,合法的括號序列如下:

  • ()
  • X 是一個合法的括號序列,那么 ( X ) 也算
  • X 和 Y 都是合法的括號序列,那么 XY 也算
  • 題目分析:最煩寫這種題目了,需要維護很多互相有關聯的變量,訓練的時候沒插手這個題,然鵝xy哥和羊駝哥最終還是沒能調出這個惡心人的題目

    考慮用失配的左括號分塊,記錄有多少個情況三的個數,用題解的圖片加以說明,比如字符串已經維護到了下面的程度:

    數字代表的只是以情況 3 計數的答案,紅色的左括號是失配的左括號,將整個序列分成了互不干擾的好幾塊,接下來考慮三種操作會造成什么影響

    第一種就是在末尾加上一個左括號

    當前這個新的左括號將前面的字符串隔離開來,所以只需要新加上一塊,然后繼續維護即可,此時新塊中的計數歸零

    第二種是在末尾加上一個右括號

    考慮兩種情況,第一種情況是,這個右括號可以找到一個與之相匹配的左括號,那么在匹配之后,之前失配的左括號的這一整塊都消失掉了,并且與前面的那一塊進行了合并,造成的貢獻就是,前面的那一塊的計數加一,最終的貢獻會因為兩個區塊的合并,加上 合并后的塊的計數

    再考慮另一種情況,也就是右括號無法匹配,這就說明了前面的所有左括號都得到了匹配,此時這個右括號將前后隔離開來,且此時左括號所維護的分塊個數也是為 1 ,如果在后續還有操作的話,那么只需要將左括號這僅有的這個分塊的計數歸零即可

    第三種也就是刪除操作了,其實刪除操作換句話說也是一種撤銷操作,只需要將狀態恢復到上一個狀態即可,題解圖示如下:

    所以我們需要在合并相鄰兩個分塊的時候額外維護一些值用于恢復,這里我選擇用用了一個對頂棧來維護分塊合并與撤銷的信息,用了一個普通的棧維護括號序列

    代碼:

    #include<iostream> #include<cstdio> #include<string> #include<ctime> #include<cmath> #include<cstring> #include<algorithm> #include<stack> #include<climits> #include<queue> #include<map> #include<set> #include<sstream> #include<cassert> #include<bitset> using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e6+100;stack<LL>st1,st2;//對頂棧維護分塊信息stack<char>st;//普通棧維護括號序列char s[N];int main() { #ifndef ONLINE_JUDGE // freopen("data.in.txt","r",stdin); // freopen("data.out.txt","w",stdout); #endif // ios::sync_with_stdio(false);scanf("%s",s+1);int n=strlen(s+1);LL ans=0;st1.push(0);//初始時自帶一塊for(int i=1;i<=n;i++){if(s[i]=='(')//如果是左括號,額外加一個分塊{st1.push(0);st.push(s[i]);}else if(s[i]==')')//如果是右括號{if(st1.size()==1)//如果匹配失敗{st2.push(st1.top());//記錄一下需要撤銷的值st1.top()=0;//將st1唯一的塊歸零st.push('*');//打一個特殊標記}else{st2.push(st1.top());st1.pop();//相鄰兩個塊的合并st1.top()++;//倒數第二個塊的總數需要加一ans+=st1.top();//更新答案st.push(s[i]);}}else//如果是刪除操作{if(st.top()=='(')//左括號直接刪除即可{st1.pop();}else if(st.top()=='*')//如果是特殊標記的右括號,直接恢復即可,不影響答案{st1.top()=st2.top();st2.pop();}else//如果刪掉這個右括號后會影響答案,按照添加時的順序倒序更新即可{ans-=st1.top();st1.top()--;st1.push(st2.top());st2.pop();}st.pop();}printf("%lld\n",ans);}return 0; }

    ?

    總結

    以上是生活随笔為你收集整理的Aizu - 1407 Parentheses Editor(对顶栈+模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品天干天干 | 日日碰狠狠添天天爽无码av | 久久99综合| 6996电视影片免费看 | 国产又粗又猛又爽又黄 | 涩涩在线观看 | 四虎精品在永久在线观看 | 国产一区二区免费电影 | 男人和女人日批视频 | 巨乳在线播放 | 少妇熟女高潮流白浆 | 大牛影视剧免费播放在线 | 欧美 唯美 清纯 偷拍 | 亚欧成人精品一区二区 | 国产精品一区二区三区久久 | 国产亚洲自拍一区 | 久久久一二三 | 中文字幕在线观看欧美 | 法国性xxxx精品hd | 中文字幕日韩国产 | www伊人网 | 欧美放荡性医生videos | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 免费观看的av网站 | 日韩大片一区二区 | 人妻无码一区二区三区久久99 | 超碰91人人 | 夏晴子在线 | av香港经典三级级 在线 | 99久久久国产 | 爱蜜臀av| 特级性生活片 | 亚洲人成在线免费观看 | 在线观看成人网 | 中文字幕中文在线 | 日本不卡一区二区三区在线观看 | 亚洲精品合集 | 国产美女流白浆 | 91偷拍一区二区三区精品 | 欧美黄色大片免费看 | 久久久蜜桃一区二区 | 男男play呻吟动漫网站 | 亚洲精品国产精品乱码不99热 | 超碰97在线人人 | 一本色道无码道dvd在线观看 | 中文在线第一页 | 国产精视频 | 神马午夜我不卡 | 国产传媒一级片 | 日韩a级大片| 动漫3d精品一区二区三区乱码 | 欧美性生交大片免费看app麻豆 | 欧美极品在线播放 | 欧美日韩国产综合网 | 亚洲中文字幕无码一区 | 国产在线第一页 | 国产激情视频在线播放 | 免费看黄色片子 | 先锋久久| 在线sese| 黄色免费在线观看网站 | 久久av喷吹av高潮av萌白 | 日产精品久久久久久久蜜臀 | 日日鲁鲁鲁夜夜爽爽狠狠视频97 | www日本xxx| 免费成年人视频在线观看 | 精品国产福利 | 成人试看120秒体验区 | 美女被男人c| 红桃成人网 | 超碰99热| 国产jizz| 日韩中文字幕亚洲精品欧美 | 在线播放视频高清在线观看 | 一本一道久久综合狠狠老精东影业 | 殴美黄色大片 | 精品成人无码一区二区三区 | 久久亚洲区 | 日韩精品一区二区三区在线 | 日韩成人无码 | 久久艹综合 | 国产免费网| 男女www| 又紧又大又爽精品一区二区 | 亚洲美女自拍偷拍 | 国产无码精品一区二区 | 77久久| 免费黄色在线网站 | 国产精品一级黄片 | 麻豆视频在线播放 | 人人干人人做 | 天堂网av手机版 | 久草老司机 | 超碰在线看 | 国产美女无遮挡免费 | 亚洲国产三级 | 亚洲精品码 | 欧美粉嫩videosex极品 | 99re在线视频观看 |