藍橋杯歷題 連號區間數

2021-10-09 11:05:44 字數 1008 閱讀 8613

給定乙個n,再給n個數是1~n的某一全排列。你要做的就是計算存在多少個區間[l,r],其重新排列的遞增序列是連續的。

r-l-1為去除區間兩端,區間中間還有的幾個元素(當然如果r==l時得到的結果是-1)

設區間最大值為 max,最小值為 min,則:

max-min-1為連續遞增序列中 min 到 max 之間還有幾個元素。

如max=3,min=1時,max-min-1=1,也就是乙個元素,1~3中間的2

那麼,如果r-l-1 == max-min-1 ,就絕對構成了成為連續遞增序列的條件,也就是連號區間。

r-l-1 == max-min-1 化簡得 r-l == max-min

以n=4,排列為3 2 4 1為例,符合題意的區間初始ans=0

1)當 r-l==0

1、2、3、4本身就是乙個符合題意的區間ans=4;

分析:當 i=1時,區間為【1,1】,min=max=3,l-r = max-min。 同理 i=2、3、4

2)當 r-l>0

【1,2】,max=3,min=2,l-r = max-min,ans++,ans=5。

【1,3】,max=4,min=2,l-r = max-min,ans++,ans=6。

【1,4】,max=4,min=1,l-r = max-min,ans++,ans=7.

【2,3】,max=4,min=2,l-r != max-min。

【2,4】,max=4,min=1,l-r != max-min。

【3,4】,max=4,min=1,l-r != max-min。

綜上,ans=7,則n=4,排列為3 2 4 1時,有7個連號區間。

#include

using

namespace std;

intmain()

for(i=

1;i<=n;i++)}

cout << ans;

return0;

}

藍橋杯 連號區間數

問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案...

藍橋杯 連號區間數

問題描述 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案...

藍橋杯 連號區間數

峰值記憶體消耗 64m cpu消耗 5000ms 小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間...