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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Serval and Parenthesis Sequence CodeForces - 1153C 贪心

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Serval and Parenthesis Sequence CodeForces - 1153C 贪心 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給出一個由"(",")","?"三種字符構成的序列,讓我們把其中的問號替換成左右括號,使得整個序列變成一個完整地括號序列,也就是括號匹配正確,而且要求不能提前結束的括號序列,比如(())()...這種的就是提前結束的括號序列,一定要讓整個序列的最后一個右括號字符正好匹配上字符串的第一個左括號字符。輸出任意一種方案。

?

分析:首先想到奇數長度的時候必定錯誤,第一個括號是),或最后一個括號是(都會出現錯誤。因為匹配必定錯誤

那么如果括號在中間的任何一個地方發現了與第一個左括號匹配也錯誤,那么相當于盡可能的先寫左括號,能寫左括號的地方寫左括號,直到左括號的數量足夠多了,等于n/2的時候再貪心的寫右括號。如果能在解題的時候看透這一點,程序就很好寫了。

這樣貪心正確的原因是:錯誤的情況必定是左括號太少以至于匹配不了這么多右括號,所以正確的case必定是前面留有足夠的空間放置左括號去匹配后面的右括號。所以只要是問號,且當前確定的左括號數量不到n/2,就直接放左括號就行,直到已經確定的左括號數量到n/2再不斷放右括號。

?

?

?

#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; const int maxn = 3e5+10; char c[maxn]; void fail(){printf(":(");exit(0);} int main(){int n;scanf("%d%s",&n,c);if((n%2==1)||c[0]==')'||c[n-1]=='(')fail();int bal=0,ll=0;for(int i=0;i<n;i++)if(c[i]=='(')ll++;for(int i=0;i<n;i++){if(c[i]=='(')bal++;if(c[i]==')')bal--;if(c[i]=='?'){if(ll<n/2)c[i]='(',bal++,ll++;else c[i]=')',bal--;}if(i!=n-1&&bal==0)fail();}if(bal!=0)fail();else printf("%s\n",c);return 0; }

?

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Serval and Parenthesis Sequence CodeForces - 1153C 贪心的全部內容,希望文章能夠幫你解決所遇到的問題。

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