題目鏈結
蒜頭君得到了 nn 個數,他想對這些數進行下面這樣的操作,選出最左邊的相鄰的差的絕對值為 11的兩個數,只保留較小的數,刪去較大的數,直到沒有兩個相鄰的差的絕對值為 11 的數,問最多可以進行多少次這樣的操作?
輸入第一行為乙個整數 n(1 \leq n \leq 10^5)n(1≤n≤105),表示數字的總數
第二行為 nn 個整數 x_1,x_2,...,x_n(0 \leq x_i \leq 10^9)x1,x2,...,xn(0≤xi≤109),表示這些數。
輸出一行,為乙個整數,表示蒜頭君最多可以進行多少次這樣的操作。
樣例輸入複製
4樣例輸出複製1 2 0 1
3讀錯了好幾次題...
維護乙個棧和佇列,先把第乙個元素放到棧裡,然後每次都判斷棧首和隊首的元素差值是否為1.
這裡考慮到幾個情況:
1.abs(隊首-棧首)不等於1,那麼隊首入棧。
2.如果隊首-棧首=1,那麼隊首直接出佇列即可。
3.如果棧首-隊首=1,將棧首出棧,隊首入棧,這時候需要判斷,棧首與隊首的差值是否為1,回到了情況2.3,迴圈。否則break
#includeusing namespace std;
typedef long long int ll;
const int maxn(1e5);
const int inf(0x3f3f3f3f);
stacks;
queueq;
int main()
int ans=0;
s.push(q.front());
q.pop();
while(!q.empty())
else
s.push(q.front());
}else
s.push(q.front());
q.pop();
ans++;
}else if(q.front()-s.top()==1)
else
}cout<53 5 6 4 1
*/
2018 藍橋杯省賽 B 組模擬賽(一)
給你乙個序列,請你在其中求出一段最長嚴格上公升的部分,它不一定要連續。include includeusing namespace std int f 10000 b 10000 int lis int n res max res,f i return res 1 int main printf d...
2018 藍橋杯省賽 B 組模擬賽(五)整數劃分
蒜頭君特別喜歡數學。今天,蒜頭君突發奇想 如果想要把乙個正整數 n n 分解成不多於 k k 個正整數相加的形式,那麼一共有多少種分解的方式呢?蒜頭君覺得這個問題實在是太難了,於是他想讓你幫幫忙。共一行,包含兩個整數 n 1 leq n leq 300 n 1 n 300 和 k 1 leq k l...
2018 藍橋杯省賽 B 組模擬賽(五)矩陣求和
給你乙個從 n times nn n 的矩陣,裡面填充 1 1 到 n times nn n 例如當 n n 等於 3 3 的時候,填充的矩陣如下。1 2 3 4 5 6 7 8 9 現在我們把矩陣中的每條邊的中點連起來,這樣形成了乙個新的矩形,請你計算一下這個新的矩形的覆蓋的數字的和。比如,n 3...