1153C 括號序列

2021-09-18 04:32:00 字數 1683 閱讀 5276

題目大意:給出1個帶有'(',')','?'三種字元的序列,可以將?轉換為)或(

若存在轉換後的**序列為'(******)'則列印,不存在則輸出':('

思路:學到了乙個思路把'('轉換為+1,')'轉換為-1,

對於乙個合法序列[1,n],任意字首和[1,i]>=0,i∈[1,i-1],且字首和[1,n]=0

於是記錄在序列中有a個(,b個),c個?,設c中有x個變成(,y個變成)

由於x+y=c,x+a=y+b,算出x,y其中x,y∈[0,c],如果超出這個範圍,就說明c不夠,序列不存在了

根據貪心思想,為了不讓字首和[1,i]小於0,就把前面x個?變成(,後面的變成)

如果中途還是遇到了l[1,i]<0或者最後l[1,n]!=0,那就沒辦法了,就只有不可能了

**:

//problem:

//date:

//skill:

//bug:

/definations/

//迴圈控制

#define clr(a) memset((a),0,sizeof(a))

#define f(i,a,b) for(int i=a;i<=int(b);++i)

#define f2(i,a,b) for(int i=a;i>=int(b);--i)

#define re(i,n) for(int i=0;i#define pb push_back

#define x first

#define y second

using namespace std;

const int inf = 0x3f3f3f3f;

const long long llinf = 0x3f3f3f3f3f3f3f3f;

options//

typedef long long ll;

#define stdcpph

#define cpp_io

#ifdef stdcpph

#include#else

#include#include#include#include#include#include#include#ifdef cpp_io

#include#include#include#else

#include#endif

#endif

basic functions//

templateinline void in(inint &x)

while (c >= '0'&&c <= '9')

x *= f;

}templateinline void out(inint x)

added functions//

const int maxn = int(3e5+10);

int a[maxn];

int n1, n_1, n0;

int ok(int n)

else a[i] = -1;

} cnt += a[i];

if (cnt < 0)return 0;

} if (cnt != 0)return 0;

}code/

int main()

if (ok(n))

else cout << ":(" << endl;

} ///

return 0;

}

問題 1153 C語言訓練 誰家孩子跑最慢

時間限制 1sec 記憶體限制 128mb 張王李三家各有三個小孩。一天,三家的九個孩子在一起比賽短跑,規定不分年齡大小,跑第一得9分,跑第2得8分,依此類推。比賽結果各家的總分相同,且這些孩子沒有同時到達終點的,也沒有一家的兩個或三個孩子獲得相連的名次。已知獲第一名的是李家的孩子,獲得第二的是王家...

題目1153 括號匹配問題

題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註,不能匹配的右括號用 標註.輸入...

九度OJ 1153 括號匹配問題

此題乃學習使用stack模板第一題。收穫了以下知識點 pop 返回void,故想要獲取棧頂並刪除需要打出top pop組合拳 stack模板申請出的物件長度是動態的,無需靜態分配 題目描述 在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內...