int stk[n]
;void push (
int value)
void pop (
)int top (
)
int que [n]
, head =
1, tail =0;
void push (
int value)
void pop (
)int front (
)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define mod 998244353
#define pi acos(-1)
#define inf 0x7fffffff
#define ll long long
using
namespace std;
ll read()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}int n,blo;
int v[
50005
],bl[
50005
],atag[
50005];
vector<
int>ve[
505]
;void
reset
(int x)
void
add(
int a,
int b,
int c)
for(
int i=bl[a]+1
;i<=bl[b]-1
;i++
) atag[i]
+=c;
}int
query
(int a,
int b,
int c)
return ans;
}int
main()
for(
int i=
1;i<=bl[n]
;i++
)sort
(ve[i]
.begin()
,ve[i]
.end()
);for(
int i=
1;i<=n;i++
)return0;
}
a - 擴號匹配問題input在某個字串(長度不超過100)中有左括號、右括號和大小寫字母;規定(與常見的算數式子一樣)任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用"$「標註,不能匹配的右括號用」?"標註.
輸入包括多組資料,每組資料一行,包含乙個字串,只包含左右括號和大小寫字母,字串長度不超過100output注意:cin.getline(str,100)最多只能輸入99個字元!
對每組輸出資料,輸出兩行,第一行包含原始輸入字元,第二行由"","樣例?"和空
格組成,
"","?"和空格組成,"
","?"和
空格組成
,"「和」?"表示與之對應的左括號和右括號不能匹配。
input
output((abcd(x)
)(rttyy())sss)(
思路((abcd(x)
$$)(rttyy())sss)(
? ?$
**標準棧模板題 遇到)就判斷棧內是否有(,有就彈出,沒有就標記
#include
#include
#include
using
namespace std;
int main (
)else
if(a[i]
==')')}
} cout << a << endl << res << endl;
}}
b - 佇列和棧input佇列和棧是兩種重要的資料結構,它們具有push k和pop操作。push k是將數字k加入到佇列或棧中,pop則是從佇列和棧取乙個數出來。佇列和棧的區別在於取數的位置是不同的。
佇列是先進先出的:把佇列看成橫向的乙個通道,則push k是將k放到佇列的最右邊,而pop則是從佇列的最左邊取出乙個數。
棧是後進先出的:把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。
假設佇列和棧當前從左至右都含有1和2兩個數,則執行push 5和pop操作示例圖如下:
push 5 pop
佇列 1 2 -------> 1 2 5 ------> 2 5
push 5 pop
棧 1 2 -------> 1 2 5 ------> 1 2
現在,假設佇列和棧都是空的。給定一系列push k和pop操作之後,輸出佇列和棧中存的數字。若佇列或棧已經空了,仍然接收到pop操作,則輸出error。
第一行為m,表示有m組測試輸入,m<100。output每組第一行為n,表示下列有n行push k或pop操作。(n<150)
接下來n行,每行是push k或者pop,其中k是乙個整數。
(輸入保證同時在佇列或棧中的數不會超過100個)
對每組測試資料輸出兩行,正常情況下,第一行是佇列中從左到右存的數字,第二行是棧中從左到右存的數字。若操作過程中佇列或棧已空仍然收到pop,則輸出error。輸出應該共2*m行。樣例
input
output2
4push 1
push 3
poppush 5
1pop
思路3 5
1 5error
error
**模擬操作下就好
棧需要從頭開始遍歷,輸出而非標準的邊top邊pop
#include
#include
#include
using
namespace std;
int stack[
1010
], stop =0;
void spush (
int t)
void spop (
)bool sempty (
)int main (
)else
if(opt ==
"pop")}
if(qerror)
else
cout << endl;}if
(serror)
else
cout << endl;}}
return0;
}
2021 GDUT 新生專題訓練
資料結構是利器,可以靈活運用,解決各種複雜的問題。具體內容太多不必列舉,關鍵還是思維。分析一道經典的例題 維護數列 傳送門 題目大意 給出乙個序列,要求支援插入 刪除 修改 翻轉 求和 求最大子列和。輸入運算元n 0 n 5e5 運算元量m 1 m 2e4 時間限制 1s,空間限制 128m 看我四...
2021 GDUT 新生專題訓練
b 佇列和棧 佇列和棧是兩種重要的資料結構,它們具有push k和pop操作。push k是將數字k加入到佇列或棧中,pop則是從佇列和棧取乙個數出來。佇列和棧的區別在於取數的位置是不同的。佇列是先進先出的 把佇列看成橫向的乙個通道,則push k是將k放到佇列的最右邊,而pop則是從佇列的最左邊取...
2019 GDUT 新生專題 I A
給定n個數字,計算出最短的連續子串行,使這個子串行的全部數字之和大於或等於給定數字s。如果不存在可以滿足題意的子串行則輸出0。這是經典的,相對比較容易的尺取問題,通過遍歷每乙個連續子串行即可得出答案。但是,由於時間的限制,要注意一些已經沒有意義的連續子串行和被重複計算的過程。include incl...