可見的山峰對數量

2021-10-14 01:12:30 字數 1217 閱讀 6354

可見的山峰對數量

乙個不含有負數陣列可以代表一圈環形山,每個位置的值代表山的高度。比如,,或都代表同樣結構的環形山。3->1->2->4->5->3 方向叫作 next 方向(逆時針),3->5->4->2->1->3 方向叫作 last 方向(順時針)。

山峰 a 和 山峰 b 能夠相互看見的條件為:

如果 a 和 b 是同一座山,認為不能相互看見。

如果 a 和 b 是不同的山,並且在環中相鄰,認為可以相互看見。

如果 a 和 b 是不同的山,並且在環中不相鄰,假設兩座山高度的最小值為 min。如果 a 通過 next 方向到 b 的途中沒有高度比 min 大的山峰,或者 a 通過 last 方向到 b 的途中沒有高度比 min 大的山峰,認為 a 和 b 可以相互看見。

問題如下:

給定乙個不含有負數且沒有重複值的陣列 arr,請問有多少對山峰能夠相互看見?

輸入描述:

第一行乙個整數 t,表示測試資料的組數。

每組資料的第一行有三個數字 n, p, m,其中 n 表示 山峰的數量,

山峰的高度陣列等於 1 - p 的 p! 個全排列按字典序排序後的第 m 個全排列的前 n 項。

輸出描述:

輸出一行乙個整數表示答案。

示例輸入

1

5 5 2

輸出
7
說明
1-5 的全排列排序後的第二個排列 為 1 2 3 5 4
備註:

1 ≤t

≤10000

1 \le t \le 10000

1≤t≤10

0001≤n

≤p

≤1000000

1 \le n \le p \le 1000000

1≤n≤p≤

1000

0001≤m

≤p

!1 \le m \le p!

1≤m≤p!

題解:找規律。。。。結果為 2∗n

−3

2*n-3

2∗n−3。

我們假設尋找的規則是 「小找大」 ,這樣保證不會漏掉某種情況。

**:

#include

using

namespace std;

intmain

(void

)return0;

}

可見的山峰對數量

題目 乙個不含有負數的陣列可以代表一圈環形山,每個位置的值代表山的高度,比如 3,1,2,4,5 4,5,3,1,2 或 1,2,4,5,3 都代表同樣結構的環形山。3 1 2 4 5 3方向叫做next方向 逆時針 3 5 4 2 1 3方向叫做last方向叫做last方向 順時針 山峰a和山峰b...

棧與佇列10 可見的山峰對數量

乙個不含有負數的陣列可以代表一圈環形山,每個位置的值代表山的高度。有兩個方向 next方向 逆時針方向 last 方向 順時針 山峰a和山峰b相互看見的條件為 如果a和b是同一座山,認為不能相互看見 如果a和b是不同的山,並且在環中相鄰,認為可以相互看見 如果a和b是不同的山,並且在環中不相鄰,假設...

尋找最後的山峰

山峰元素是指其值大於或等於左右相鄰值的元素。給定乙個輸入陣列nums,任意兩個相鄰元素值不相等,陣列可能包含多個山峰。找到索引最大的那個山峰元素並返回其索引。分析 本問題思想較為簡單,即比較與討論數字相鄰兩數字之間的大小即可。但應考慮到幾種特殊的情況 1 只含有乙個山峰且山峰在開頭 2 山峰在末尾 ...