給出乙個括號序列,求出最長合法子串和它的數量。 合法的定義:這個序列中左右括號匹配。
這個題和普通的括號匹配有區別,並行的括號匹配也可以存在,比如()()(),這種答案就是長度為6。
用乙個陣列記錄每個位置是否匹配,用棧模擬,每遇到乙個'('直接將下標入棧,遇到')'就看棧裡面有沒有'(',如果有就將這個位置和他匹配的位置(棧頂)置為10然後pop,沒有就繼續。
然後這個陣列就是一片01了,找最長連續1即可,因為1表示這個位置可以匹配。
#include using namespace std;#define inf 0x3f3f3f3f
#define ll long long
const int n = 1e6 + 5;
const int mod = 1e9 + 7;
const double eps = 1e-8;
const double pi = acos(-1.0);
#define lowbit(x) (x & (-x))
int a[n];
int main()
}int mx = 0, cnt = 0;
mapmp;
for (int i = 0; i < l; i++)
else
cnt = 0;}}
if (cnt >= mx)
mx = cnt, mp[mx]++;
if (mx == 0)
mp[mx] = 1;
cout << mx << " " << mp[mx] << endl;
return 0;
}
codeforces,1215C(模擬 思維)
題意 給定兩個只包含 a b 的長度相同字串s,t,要你將他們變成一模一樣的串,你每次可以將s中的乙個字元與t中的乙個字元交換,最後輸出次數並輸出步驟。首先明確,相同的部分是不用動的,我們只需動不同的部分。其次,我們分析一下s i t i 的情況,無非就是 s i a t i b 或 s i b t...
CodeForces 808C 貪心 思維
給定你n個酒杯的大小,和你一大瓶酒 容量m,要求1 每個杯至少放一半,奇數向上取整 2 容量大的杯子放的酒要比容量小的多 3 每個杯子裡都要有,並且是整數性質。是周賽的題,開始時交了十幾遍,一直錯在第8個樣例。比賽完又自己開codeforce交了十幾次。終於發現了錯誤的原因竟然是兩行的 的順序顛倒了...
CodeForces 1169C(二分 思維)
codeforces 1169c 1 思路 每次可以選取任意幾個數字進行 ai 1 m的操作,所以最多m次讓序列變為非遞減序列。讓所有的元素值保持盡可能的小,能使最終的運算元最小。所以可以二分查詢需要進行修改的次數tim。2 include include include includeusing ...