大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,
(1) 對每個pop操作,我們記錄它之前一共有多少個push操作。
(2) 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。
例如:操作push, push, pop, push, push, pop, push, pop, pop, pop
用第一種方法 記錄為 2, 4, 5, 5, 5
用第二種方法 記錄為 0, 0, 0, 2, 4
這兩種記錄方法可以互相轉化,我們的問題是,給定第二種記錄方法的序列,請求出第一種記錄方法的序列。
#include
#include
#include
#include
#include
using
namespace
std;
const
int maxn=1e6+5;
int a[maxn],n,i,t,j,k,l,x,b[maxn];
int dg()
void dg1(int x)
dg1(x/10);putchar(x%10+'0');
}int main()
51nod 1403 有趣的堆疊
大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。對於第二種記錄方式,上面壓的個數,即...
51nod1403 有趣的堆疊
看成括號序列的話第二種方法其實就是左括號和右括號之間有多少對完整的括號。include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s...
1403 有趣的堆疊
1403 有趣的堆疊 基準時間限制 1 秒 空間限制 131072 kb 分值 大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,...