看成括號序列的話第二種方法其實就是左括號和右括號之間有多少對完整的括號。
#include#include#include#includeusing namespace std;1403 有趣的堆疊#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read()
char s[20];
void print(int x)
const int nmax=1e6+5;
int a[nmax],ans[nmax<<1];
int main()
int cnt=0;
rep(i,1,n*2)
} printf("\n");
return 0;
}
基準時間限制:1 秒 空間限制:131072 kb 分值: 80 難度:5級演算法題
收藏關注大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,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
這兩種記錄方法可以互相轉化,我們的問題是,給定第二種記錄方法的序列,請求出第一種記錄方法的序列。
input
第一行乙個整數n,表示序列的長度(0output第二行n個整數,表示第二種方法的記錄。
一行,空格分隔的n個整數,表示第一種表示方法的序列。input示例
5output示例0 0 0 2 4
2 4 5 5 5
51nod1403 有趣的堆疊
大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。例如 操作push,push,pop...
51nod 1403 有趣的堆疊
大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。對於第二種記錄方式,上面壓的個數,即...
1403 有趣的堆疊
1403 有趣的堆疊 基準時間限制 1 秒 空間限制 131072 kb 分值 大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,...