題目大意:給出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 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內...