蒜頭君有一台神奇的魔法機,它能將輸入的序列進行一系列複雜的變換,輸出原序列的另一種排列方式。蒜頭君十分好奇魔法機的工作原理,終於有一天他嘗試著把魔法機拆開研究了。
通過一系列複雜的演算,蒜頭君終於發現了魔法機的工作原理:其實魔法機就是乙個棧,根據棧先進後出的性質,每次乙個數字進棧或將棧頂元素彈出,由此可以產生不同的出棧序列,出棧序列就是原序列的另一種排列了。
在研究完原理後,蒜頭君憑藉記憶很快就把魔法機組裝好了。現在蒜頭君想測試下魔法機在組裝完成後是否出現問題。
首先他將 1 到 n 這 n 個數字依次輸入魔法機裡,然後隨機寫下一組序列a,現在他想知道能否通過魔法機得到序列a,聰明的你能幫蒜頭君算一算嗎?
輸入格式
輸入有兩行,第一行是乙個正整數 n(1≤n≤100),表示輸入魔法機序列的長度,第二行是序列a,共有 n 個整數,表示要得到的目標序列。
序列為 1 到 n 的排列,即序列a長度為 n,保證序列中的整數都不相同,且整數在區間 [1, n] 內。
輸出格式
輸出一行,如果能通過魔法機得到序列a,則輸出yes,否則輸出no。
#include #define error 0
#define ok 1
typedef struct stackstack;
void init(stack *s, int length)
int push(stack *s, int element)
s->top_index++;
s->elements[s->top_index] = element;
return ok;
}int pop(stack *s)
s->top_index--;
return ok;
}int top(stack *s)
int empty(stack *s)
void clear(stack *s)
int main()
while (top(stack) < m)
if (flag == 0 && i == n + 1)
if (!empty(stack) && top(stack) == m)
if (flag && empty(stack))
}if (!empty(stack)) printf("no\n");
else printf("yes\n");
clear(stack);
return 0;
}
蒜頭君面試
題目 問題描述 蒜頭君來蒜廠面試的時候,曾經遇到這樣乙個面試題 給定 n 個整數,求裡面出現次數最多的數,如果有多個重複出現的數,求出值最大的乙個。當時可算是給蒜頭君難住了。現在蒜頭君來考考你。輸入格式 第一行輸入乙個整數n 1 n 100000 接下來一行輸入n個 int 範圍內的整數。輸出格式 ...
蒜頭君下棋
蒜頭君下棋 共一行,兩個整數nn和mm 1 leq n m leq 10001 n,m 1000 代表棋盤一共有 nn 行 mm 列。輸出乙個整數,代表棋盤上最多能放的馬的數量。樣例輸入1複製 2 4樣例輸出1複製 4樣例輸入2複製 3 4樣例輸出2複製 6 1 當棋盤只有一行時,棋盤上全放上棋子即...
蒜頭君闖關
題目 如下 includeusing namespace std long long a 1005 dp 1005 int main ans max ans,dp i cout ans endl return 0 這道題是求上公升序列最大和,dp i 代表前i關最大難度和,每次求dp i 的值,首先...